AngularJs $ q.all无法使用for循环

时间:2019-05-06 08:12:38

标签: javascript angularjs angular-promise angularjs-q

我在下面的代码中,只想在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() 
        // });

删除了一些代码以提高可读性,但它正在显示数据。

以上述不同方式尝试过,有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

我猜(因为您没有提供完整的代码),您想在return之前添加getItemDetails

promise = promise.then(() => {
            return getItemDetails(Plant_Id, Week_ID, Area_Id, Itemtype, itemId, flavorId)

以这种方式产生的承诺将等待getItemDetails的结果