gpt4 book ai didi

javascript - await只在异步函数: JavaScript NodeJS有效

转载 作者:行者123 更新时间:2023-11-29 23:08:34 25 4
gpt4 key购买 nike

下面是我的用户注册 Controller 。在注册之前,我希望 getAccountBill 方法返回结果,因为它在使用 async/await 之前返回 null。我现在有这个错误:

const user = await User.create({
^^^^^
SyntaxError: await is only valid in async function

Controller :

// Register Action
exports.register = (req, res) => {
function getAvailableFunds() {
const availableFunds = 0;
return availableFunds;
}

async function getAccountBill() {
const accountBill = `2222${Math.floor(
Math.random() * 90000000000000000000,
) + 10000000000000000000}`;

try {
const isAccountBill = await Bill.findOne({
where: {
account_bill: accountBill,
},
});
return isAccountBill ? await getAccountBill() : accountBill;
} catch(e) {
console.error(e);
}
}

function getAccountBalanceHistory() {
const accountBalanceHistory = '0,0';
return accountBalanceHistory;
}

function getTodayDate() {
const today = new Date();
return today;
}

User.findOne({
where: { login: req.body.login },
}).then(isUser => {
if (!isUser) {
bcrypt.hash(req.body.password, 10, (err, hash) => {
req.body.password = hash;

const user = await User.create({
login: req.body.login,
password: req.body.password,
name: req.body.name,
surname: req.body.surname,
email: req.body.email,
date_registration: getTodayDate(),
});
const account_bill = await getAccountBill();
const bill = await Bill.create({
id_owner: user.id,
account_bill,
available_funds: getAvailableFunds(),
})
const additional = await Additional.create({
id_owner: user.id,
account_balance_history: getAccountBalanceHistory(),
});
res.status(200).json({ register: true });

}),
);
});
} else {
res.status(400).json({ error: 'User already exists.' });
}
});
};

问题是什么?

最佳答案

欢迎使用 stackoverflow,试试这个解决方案。

await 关键字仅在 async 函数中有效。如果您在 async 函数体之外使用它,您将得到一个 SyntaxError

因此您必须在此处进行更改:

bcrypt.hash(req.body.password, 10, async (err, hash) => { ...

此外,我对您的代码进行了更正以使其正常工作,检查一下并祝您编码愉快!

function getAvailableFunds() {
const availableFunds = 0;
return availableFunds;
}

async function getAccountBill() {
const accountBill = `2222${Math.floor(
Math.random() * 90000000000000000000,
) + 10000000000000000000}`;

try {
const isAccountBill = await Bill.findOne({
where: {
account_bill: accountBill,
},
});
return isAccountBill ? await getAccountBill() : accountBill;
} catch (e) {
console.error(e);
}
}

function getAccountBalanceHistory() {
const accountBalanceHistory = '0,0';
return accountBalanceHistory;
}

function getTodayDate() {
const today = new Date();
return today;
}

// Register Action
module.exports.register = (req, res) => {
User.findOne({
where: { login: req.body.login },
}).then((isUser) => {
if (!isUser) {
bcrypt.hash(req.body.password, 10, async (err, hash) => {
req.body.password = hash;

const user = await User.create({
login: req.body.login,
password: req.body.password,
name: req.body.name,
surname: req.body.surname,
email: req.body.email,
date_registration: getTodayDate(),
});
const account_bill = await getAccountBill();
const bill = await Bill.create({
id_owner: user.id,
account_bill,
available_funds: getAvailableFunds(),
})
const additional = await Additional.create({
id_owner: user.id,
account_balance_history: getAccountBalanceHistory(),
});
res.status(200).json({ register: true });
});
} else {
res.status(400).json({ error: 'User already exists.' });
}
});
}

关于javascript - await只在异步函数: JavaScript NodeJS有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54279317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com