AngularJs承诺承诺

Ben*_*lah 2 angularjs angular-promise

嘿家伙我正在将一些数据发布到服务器然后基于几个变量再次发布到循环内的不同URL.

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

    $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');
   });
Run Code Online (Sandbox Code Playgroud)

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

干杯,本

And*_*ahl 10

尝试改变这个:

$http({}).then(function() { 
  var something=1; 
});
Run Code Online (Sandbox Code Playgroud)

至:

return $http({}).then(function() { 
  var something=1; 
});
Run Code Online (Sandbox Code Playgroud)

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

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

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