Ajax调用里面的forEach循环Angular

时间:2017-05-03 10:20:22

标签: javascript angularjs angular-promise

我有一个包含AngularJS中对象的Array。根据这些对象的属性(snooz)的值,我必须调用POST请求(getData.sonnzeUpdate())。在遍历数组中的每个对象之后,最后,我必须调用GET请求。我的问题是在获取POST请求的响应($scope.getTableData)之前执行了GET请求(在函数res内)。

我尝试过使用.then(function(res){})和angular.forEach(

这是我的代码示例

$q

2 个答案:

答案 0 :(得分:0)

在您的代码中,notifiedAlarms在此时为空:$q.all(notifiedAlarms),因为您在完成后向该数组添加了承诺。

避免延迟反模式。 getData.sonnzeUpdate()已经给你一个承诺。

angular.forEach(snoozedData, function (snoozed_asset, asset_key) {
    if (snoozed_asset.snooz != checkTine) return;
    snoozed_asset.snooz = '';

    notifiedAlarms.push(
        getData.sonnzeUpdate({ data: snoozed_asset }).then(function(res) {
            if (res.status == '200') {
                toastr.info('Alarm with property ' + data.data.actualFailureArea + ' is activated');
            } else {
                throw new Error('Error in update');
            }
        })
    );
});

答案 1 :(得分:0)

使用$q.all(notifiedAlarms).then($scope.getTableData()),您直接执行$scope.getTableData(),而不是在承诺得到解决后告诉它调用它。因此,它会比你想要的更早执行。

将其更改为$q.all(notifiedAlarms).then($scope.getTableData);以获得所需的行为。

以下是一个详细阐述这个问题的例子:

jsfiddle example

请注意,在小提琴中,我有两种方式,

myownservice.UpdateSomeData().then($scope.setValue)
myownservice.UpdateSomeData().then($scope.setValue2())

而且,在HTML中,只有value更新,而不是value2