当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 如何将下面的代码替换为Bluebird Promise样式?

来源:互联网 收集:自由互联 发布时间:2021-06-16
所有我对蓝鸟/ promiseA几乎都是新手,我想知道如何将下面的猫鼬代码替换为蓝鸟风格? UserUnit.find({ user_id: req.user._id }).populate('unit_id').exec(function (err, units) { if (err) { res.send(err) } else { a
所有我对蓝鸟/ promiseA几乎都是新手,我想知道如何将下面的猫鼬代码替换为蓝鸟风格?

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)
})
UserUnit.find不是回调方法,甚至不是异步的,因此UserUnit.findAsync没有意义.你不应该宣传你自己的课程,你应该让你的clasess返回承诺开始.

如果你在某个地方宣传了猫鼬:

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);
    });
网友评论