AngularJS如何链的诺言

发布时间: 2017/4/16 20:30:36
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个问题关于链接的承诺。

这里是我的代码︰

var removeProducts = function(id) {
    anotherService.removeProducts(id); // this will return a promise.
}

var addProduct = function(id) {
    myService.addProduct({id: id})
}

$scope.pickProduct = function() {
    myService.updateId({'id':123}).$promise.then(function(items) {
        items.categories.filter(function(category) {
            if (category.type === 'NEW') {
               removeProducts(items.id);
            }
        })
        //this is the part I don't know how to proceed. I need to make sure 
        //the product is removed before first and update ID second so I can add     
        //another product.  

        addProduct(item.id);
    })
}

基本上我需要调用 updateId 方法从 myService 每次添加或删除产品。所以步骤如下所示︰

Update ID
Remove product if there is a type 'New'
Update ID 
Add product

如何更改这?谢谢你的帮助 !

解决方法 1:

基本上你可以像这样链承诺︰

myService.pickProduct(product)
    .then(_update)
    .then(_remove)
    .then(_add)
    .catch(..);



function _update(product) {
    return product.id;
}

function _remove(id) {
   return new Date();
}

function _add(date) {

}

返回值 then 将作为下一个 '链' 承诺的输入 then 。在我的例子服务功能 pickProduct 必须返回一个承诺持有该产品,因为我期待它作为内输入 _update ,等等。

赞助商