所有我对bluebird / promiseA +几乎都是新手,我想知道如何将下面的mongoose代码替换为bluebird风格?
UserUnit.find({ user_id: req.user._id }).populate('unit_id').exec(function (err, units) {
if (err) {
res.send(err)
} else {
a = a + b;
res.json(units)
}
})
以下是我的尝试:
var Promise = require('bluebird')
Promise.promisifyAll(UserUnit)
Promise.promisifyAll(UserUnit.prototype)
var Promise = require('bluebird')
Promise.promisifyAll(UserUnit)
Promise.promisifyAll(UserUnit.prototype)
UserUnit.findAsync({ user_id : req.user._id })
.spread(function (rs) {
return Promise.try(function() {
return rs.populate('unit_id')
})
}).then(function (units) {
res.json(units)
}).catch(function (err) {
if (err) res.send(err)
})
答案 0 :(得分:7)
UserUnit.find
不是回调方法,甚至不是异步方式,因此UserUnit.findAsync
没有意义。你不应该宣传你自己的课程,你应该让你的clasess一起回复承诺。
如果你在某个地方宣传过mongoose:
Promise.promisifyAll(require("mongoose"));
你可以做到
UserUnit.find({ user_id: req.user._id })
.populate("unit_id")
.execAsync()
.then(function(units) {
res.json(units);
})
.catch(function(err) {
res.send(err);
});