angularjs如何成功回调的所有数据为多个承诺都等待

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

我有此 API 调用,但不会收到中的数据我 successCallback 在同一命令我发送它。

    for (var i = 0; i < data.length; i++) {
      $http.post('/api/bla/blabla', $.param(data[i]))
        .then(successCallback, errorCallback);
     }

    var successCallback = function (response) {
       /*
       receive data in random order.
       assume its being send / handled so fast, thats its random
       which gets done first.
       */
    };

可以不知何故等待要接收所有数据,然后对它进行重新排序到原始排序?或有另一种解决方案。

解决方法 1:

使用 $q.all 来获取所有的数据以正确的顺序。

var promiseArray = [];
for (var i = 0; i < data.length; i++) {
    var dataPromise = $http.post('/api/bla/blabla', $httpParamSerializer(data[i]))
        .then (function (response) {
             //return data for chaining
             return response.data;
        })
    ;
    promiseArray.push(dataPromise);
}

$q.all(promiseArray).then(function (dataArray) {
     //dataArray will be in original order
     //process results here
}).catch (function (errorResponse) {
     //log error
});

promiseArray将按正确的顺序创建。即使个别的 XHR 员额要求不得送达在原始订单, $q 服务将跟踪承诺和填充数据数组在正确的顺序 (或决心拒绝上的第一个错误)。

在 JSFiddle 上的演示

赞助商