Mongoose的文档确认方法save返回了一个承诺。我想使用这种方法将用户模型保存在数据库中。我这样做是这样的:
save (user) {
user.save((err, user) => {
if (err) {
return handleError(err);
} else {
console.log('The user ' + user.screenName + ' has been added.');
}
this.db.close();
});
}
Run Code Online (Sandbox Code Playgroud)
请注意,用户参数为:
mongoose.model('User', this.userSchema);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么下面的console.log返回false:
console.log((userRepository.save(user) instanceof Promise));
Run Code Online (Sandbox Code Playgroud)
当然,当我尝试then()承诺时,我没有用。
我想念什么吗?我也尝试返回user.save(...),但仍然无法正常工作。
感谢您阅读我的信息,祝您有美好的一天!
首先,您的save(user)方法当前return本身什么都没有,因此结果始终undefined与Mongoose的行为无关:
console.log(typeof userRepository.save(user) === 'undefined'); // true
Run Code Online (Sandbox Code Playgroud)
但是,Mongoose通常使您可以使用其每个方法选择回调或Promise。除了通过示例片段暗示它之外,文档还不是很清楚: Mongoose的文档现在可以澄清这一点:
返回值:
- «Promise,未定义»如果与回调一起使用,则返回未定义,否则返回Promise。
打回来:
Run Code Online (Sandbox Code Playgroud)product.sold = Date.now(); product.save(function (err, product) { if (err) .. })
诺言:
Run Code Online (Sandbox Code Playgroud)product.save().then(function(product) { ... });
在您的情况下,如果您想返回Promise,则您的save(user)方法也必须使用和return它们:
save (user) {
return user.save()
.then(user => console.log('The user ' + user.screenName + ' has been added.'))
.catch(err => handleError(err))
.finally(() => user.db.close());
}
Run Code Online (Sandbox Code Playgroud)
(注意:关于.finally())
| 归档时间: |
|
| 查看次数: |
2149 次 |
| 最近记录: |