如何将下面的代码替换为Bluebird Promise风格?

时间:2015-01-20 11:02:34

标签: node.js mongoose bluebird

所有我对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)
})

1 个答案:

答案 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);
    });