Angularjs:在承诺完成之前调用$ q

时间:2015-12-01 16:07:50

标签: angularjs

我在使用$ q和承诺方面遇到了麻烦 我这样做:

for (var i = 0; i<$scope.products.length; i++){
   var product = $scope.products[i];
   promises.push(Sale.save(product,function(result){
       $scope.listOfProducts.push(result);
   }));
}
$q.all(promises).then(function() {      
        echo('done');
    });
});

我的问题是在所有Sale.save完成之前调用echo(&#39; done&#39;)。 我不知道为什么。

如果有人知道......
谢谢

2 个答案:

答案 0 :(得分:1)

我假设Sale是一种资源,如果是这种情况,你需要以不同的方式处理这个承诺。

试试这个:

for (var i = 0; i<$scope.products.length; i++){
   var product = $scope.products[i];
   promises.push(Sale.save(product).$promise.then(function(result){
       $scope.listOfProducts.push(result);
       return result;
   }));
}
$q.all(promises).then(function(results) {      
        echo('done');
    });
});

答案 1 :(得分:0)

Here is使用$timeout来模拟每个函数进程的延迟的粗略示例。

您应该尝试返回独立运行循环上的每个值,以便将函数推送到promise队列中:

promises.push($scope.testFuncToResolve(i).then(function (result) {
  //extra stuff here
  return result;
}));