我有一个包含AngularJS中对象的Array。根据这些对象的属性(snooz
)的值,我必须调用POST请求(getData.sonnzeUpdate()
)。在遍历数组中的每个对象之后,最后,我必须调用GET请求。我的问题是在获取POST请求的响应($scope.getTableData
)之前执行了GET请求(在函数res
内)。
我尝试过使用.then(function(res){}
)和angular.forEach(
。
这是我的代码示例
$q
答案 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);
以获得所需的行为。
以下是一个详细阐述这个问题的例子:
请注意,在小提琴中,我有两种方式,
myownservice.UpdateSomeData().then($scope.setValue)
myownservice.UpdateSomeData().then($scope.setValue2())
而且,在HTML中,只有value
更新,而不是value2