如何在 Mongoose 中等待 model.save()
Posted
技术标签:
【中文标题】如何在 Mongoose 中等待 model.save()【英文标题】:how to wait for model.save() in Mongoose 【发布时间】:2020-11-05 17:58:40 【问题描述】:我有这样的功能:
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
结果返回 undefined 并且它在 console.log(data) 之前运行,这很奇怪。有什么方法可以得到 newUser.save() 的结果,要么是错误,要么是成功保存的数据?
【问题讨论】:
这能回答你的问题吗? Mongoose await save 我在发布这个帖子之前看到了,但我不知道如果我想等待它,我不能把回调放在那里。 【参考方案1】:由于您将回调传递给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);
;
【讨论】:
【参考方案2】:如果要使用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");
【讨论】:
createNewUser async (user)
这是语法错误吧! async 关键字应该在函数名之前。【参考方案3】:
您也可以使用此简码。如果需要,可以将该函数包含在 try-catch 块中。
async createNewUser (user)
const result = new User(
name: user.name,
password: user.password
);
console.log(await result.save())
【讨论】:
以上是关于如何在 Mongoose 中等待 model.save()的主要内容,如果未能解决你的问题,请参考以下文章