如何重构以下代码才能使用q?

时间:2014-04-16 13:10:09

标签: javascript promise q

q新手,我得到了一个示例代码如下,它的作用是,获取订单,然后获取订单的所有者,将所有者的名称附加到订单,以便显示完整的订单,如何将此更改为使用Q(kriskowal / q)?谢谢,

db.get_order(order_id, function(err, order) {
users.get_user(order.user_id, function(err, user) {
    order['$user_name'] = user.name
    console.log(order)
  })
})

1 个答案:

答案 0 :(得分:1)

我假设get_order函数取决于db对象,而get_user取决于user对象。如果是这种情况,那么您需要使用Q.ninvoke调用这些方法,如此

Q.ninvoke(db, "get_order", order_id)
.then(function(order) {
    return Q.ninvoke(user, "get_user", order.user_id);
})
.then(function(user) {
    console.log(user.name);
})
.catch(function(err) {
    console.error(err);
});