在AngularJS中展平嵌套的承诺

时间:2015-02-05 11:20:31

标签: javascript angularjs promise angular-promise

有没有办法将链中的一个承诺的返回值传递给下一个但不是下一个?目前,我们通常嵌套promises以将值保留在函数范围内,如下所示:


return getOrder()
    .then(function (order) {
        return getOrderlines(order)
            .then(function (orderLines) {               
                //do something with order and orderlines
                processOrderAndOrderlines(order, orderLines);
            });
    })
    .then(function () { //do something else
    });

是否有可能以某种方式将订单对象传递到promise链中以获得类似的内容:

return getOrder()
    .then(function (order) {
        return getOrderlines(order);            
    })
    .then(function (orderLines) {               
        //do something with order and orderlines
        processOrderAndOrderlines(order, orderLines);
    });
    .then(function () { //do something else
    });

2 个答案:

答案 0 :(得分:0)

您可以在外部范围定义变量并将其设置在promise中:

var order, orderLines;

return getOrder()
    .then(function (result) {
        order = result;
        return getOrderlines(order);            
    })
    .then(function (result) {               
        //do something with order and orderlines
        orderLines = result;
        processOrderAndOrderlines(order, orderLines);
    });
    .then(function (result) { //do something else

    });

答案 1 :(得分:0)

如果您需要在orderLines中同时使用order和初始processOrderAndOrderlines对象,那么最简洁的方法是使用某种地图解析getOrderlines承诺,其中包含{ {1}}也是对象。例如:

order

那么你就可以这样使用它:

function getOrderLines(order) {
    // Some promise flow, e.g.:
    return $http.post('getOrderLines', {order: order}).then(function(response) {
        return {
            order: order,
            orderLines: response.data
        }
    });
}