使用Angular的决心时,将承诺链接起来的最佳方法是什么:{}?

时间:2015-07-02 23:03:57

标签: javascript angularjs angular-promise

我正在使用angular的决心,并希望链接两个承诺。解决这个问题的最佳方式是什么?从本质上讲,我想:

resolve: {
    my_two_lists: function() {
    return MyService.list().then(function(array1) {     
         return MyOtherService.list().then(function(array2) { 
               return new Promise(function(resolve, reject) { 
                    resolve(array1.concat(array2)); 
               }); 
          }); 
       });
    }
}

换句话说:我有2个服务,每个服务都有两个名为“list”的方法,它们返回一个解析为列表的promise。我想将这两个承诺链接起来。

1 个答案:

答案 0 :(得分:5)

我通过Javascript承诺学到的东西 - 如果你有多个嵌套级别,那么会有更好的方法。

这是一个更简洁的解决方案,您可以在parralel中调用两个list命令。

resolve: {
    my_two_lists: function() {
            return Promise.all([MyService.list(), MyOtherService.list()])
                   .then(function(values) {
                        return values[0].concat(values[1]));
                   });
    }
}

如果由于某种原因,你想要一个接一个地调用它们,那么你的例子是正确的,除了没有必要再返回另一个承诺。只需返回一个值。 my_two_lists的结果仍然是一个解析为两个数组串联的承诺。

resolve: {
    my_two_lists: function() {
    return MyService.list().then(function(array1) {     
         return MyOtherService.list().then(function(array2) { 
               return array1.concat(array2);
          }); 
       });
    }
}