【发布时间】:2019-04-17 18:50:48
【问题描述】:
使用 ExpressJs(作为 Node.js 的 Web 框架)和 Mongoose(用于建模 MongoDB)来创建 Web 服务。我有一个关于从某些 mongoose 方法(保存、查找、findByIdAndDelete 等)处理返回对象的最佳方法的问题。
正如猫鼬文档所说,Model.prototype.save() 将返回 «Promise,undefined» 如果与回调一起使用则返回 undefined,否则返回 Promise。 更多信息:https://mongoosejs.com/docs/api.html#model_Model-save
所以我想知道我们应该使用哪一个,或者在哪种情况下一个比另一个更好?
作为使用 ES7 Async/Await 的示例:
const mongoose = require('mongoose');
const Person = mongoose.model('person');
module.exports.savePerson = async (req,res) => {
await new Person( {...req.body} )
.save( (err, doc)=> {
err ? res.status(400).json(err) : res.send(doc);
});
}
作为使用 ES6 Promise 的示例:
const mongoose = require('mongoose');
const Person = mongoose.model('person');
module.exports.savePerson = (req,res) => {
const person = new Person( {...req.body} )
person.save()
.then(person => {
res.send(person);
})
.catch(err => {
res.status(400).json(err)
});
}
【问题讨论】:
-
这不是 promise vs async/await,因为 async/await 是 promise 的语法糖。这是 Mongoose 承诺与回调 API。回调 API 已过时。它当然不应该像上面的例子那样与 async/await 一起使用
标签: javascript node.js mongodb express mongoose