我在下面的代码中,只想在for循环完成后执行DisplayData()函数,但DisplayData()与for循环一起执行,因此数据在for循环项的每次迭代之后都显示,但不是除外。
var promises = [];
//let promise = $q.resolve();
var itemId = ''; var flavorId = '';
for (var b = 0; b <= $scope.flavorsrray.length - 1; b++) { // 3
itemId = $scope.flavorsrray[b].ITEM_ID; flavorId = $scope.flavorIDArray[a].FLAVOR_ID;
promise = promise.then(() => {
return getItemDetails(Plant_Id, Week_ID, Area_Id, Itemtype, itemId, flavorId).then(function () {
ItemDtls = $scope.ItemDetails;
alert(ItemDtls); -->
if (ItemDtls != null && ItemDtls != '' && ItemDtls.length > 0) {
..... doing some stuff here
}
})
});
promises.push(promise);
}
$q.all(promises).then(function () {
alert("done"); //---> this alert is executing before the alert(ItemDtls);
DisplayData();
})
// promise.then(() => {
// alert("done"); ---> this alert is executing before the alert(ItemDtls);
// DisplayData()
// });
删除了一些代码以提高可读性,但它正在显示数据。
以上述不同方式尝试过,有没有办法解决这个问题?
答案 0 :(得分:0)
我猜(因为您没有提供完整的代码),您想在return
之前添加getItemDetails
:
promise = promise.then(() => {
return getItemDetails(Plant_Id, Week_ID, Area_Id, Itemtype, itemId, flavorId)
以这种方式产生的承诺将等待getItemDetails的结果