我有一个类似的功能:
createNewUser async (user) {
const newUser = new User();
newUser.name = user.name;
newUser.password = user.password;
let result = await newUser.save((err, data) => {
if (err) return err;
console.log(data);
return data;
})
console.log(result) // Undefined
}
结果返回未定义,并且在console.log(data)之前运行,这很奇怪。是否有任何方法可以获取newUser.save()的结果是错误还是成功保存了数据?
答案 0 :(得分:3)
由于您将回调传递给save
,因此它将不再返回承诺,因此使用await
无效。
如果您希望它返回承诺,则不要传递回调,而可以使用try-catch
块来检测错误:
const createNewUser = async (user) => {
const newUser = new User();
newUser.name = user.name;
newUser.password = user.password;
try {
const result = await newUser.save();
console.log(result);
} catch (err) {
console.log(err);
}
};
答案 1 :(得分:3)
如果要使用async/await
或promises
,则不必使用回调。
此时刻已在documentation中得到澄清。
因此,正确的代码:
async createNewUser (user) {
const newUser = new User();
newUser.name = user.name;
newUser.password = user.password;
const result = await newUser.save();
console.log(result); // result
}
如果您需要处理错误(强烈建议这样做,但是在代码错误处理程序中什么也不做),则可以将其包装到try/catch
中:
async createNewUser (user) {
const newUser = new User();
newUser.name = user.name;
newUser.password = user.password;
try {
const result = await newUser.save();
console.log(result); // result
} catch (err) {
console.error("something goes wrong");
}
}
答案 2 :(得分:2)
您也可以使用此简码。如果需要,可以将该函数包含在try-catch块中。
async createNewUser (user) {
const result = new User({
name: user.name,
password: user.password
});
console.log(await result.save())
}