AngularJs承诺承诺

时间:2014-03-17 06:20:14

标签: angularjs angular-promise

嘿伙计们我将一些数据发布到服务器然后基于几个变量再次发布到循环内的不同网址。

到目前为止,我用的是一个例子:

    $scope.items = [{'name':'Test1','hasd':1,'hase':1},{'name':'Test2','hasd':0,'hase':1}];
    var promises = [];

    angular.forEach($scope.items,function(obj) {
    promises.push($http({
        type:'post',
        url:'test',
        data:obj
      }).then(function(response) { 
          if(response.status==201) {
             //do another http call
             if(obj.hasd==1) {
                $http({}).then(function() { 
                    var something=1; 
                });
             }
          }
        }));

   $q.all(promises).then(function(){
      alert('done');
   });

我遇到的问题是,它只是查看最初的$ http呼叫的承诺,而不是任何内部呼叫。有没有办法将所有$ http调用添加到循环内的promise中?

干杯, 本

1 个答案:

答案 0 :(得分:10)

尝试更改此内容:

$http({}).then(function() { 
  var something=1; 
});

要:

return $http({}).then(function() { 
  var something=1; 
});

这意味着,在“内部”承诺完成之前,您添加到promises数组的“外部”承诺将无法解决。

原因是then处理程序可以返回值或其他promise。要理解这一点,您需要了解所有then处理程序都会创建新的承诺。因此,最终总会有一个悬而未决的承诺,没有人关心。

如果你的then处理程序没有返回任何内容,那么Javascript将(有点)为你返回undefined。因此,您的then处理程序创建的承诺将立即使用您返回的值解决,如果您没有返回任何内容,则undefined。但是你也可以返回一个新的promise,它将被传递回你的promises数组。