AngularJS承诺和$ http.get

问题描述:

我试着使用$ q.defer,$ q.all和承诺,以等待HTTP的请求列表

我使用此代码来调用$ Q。全部

$q.all(promises).then(function(data) { 
     console.log('All promises have resolved', data); 

     var retVal = Utils.DoStep2(); 
     console.log(retVal); 
}); 

这个函数永远不会被调用,虽然我检查并且$ http.get被调用所有的值。

  var deferred = $q.defer(); 
      $http.get(requestUrl). 
      then(function (data) { 
       var p = { 
        data: data, 
        name: name 
       }; 
       pData.push(p); 
       deferred.resolve(p); 
       return p; 
      }) 
      .catch(function (status) { 
       deferred.reject(status); 
      }); 

      promisesList.push(deferred.promise); 
上DoStep2的pData的长度,也

林印刷使用的pData的console.log 和我所得到的是0长度,看上去就像0对象,但是当我打开它,它看起来像所有的对象在每个特定调用的$ http.get调用中初始化,这使我确信接收到$ http.get响应,并且这是一个有效的响应。

此外,$全部都不会被调用什么可能是错误的?

感谢您的帮助

+0

一种可能性是您没有针对每个请求获得成功响应。如果你有400个响应,那么这个计数就是对'$ http.get'的拒绝。另一个是'.then()'中的直接运行时错误(我看不到'pData'声明,所以'.push'可能会失败。 –

+2

请提供[mcve]。也不应该使用'$ q.defer()'因为'http http'本身返回一个承诺 – charlietfl

+1

其他问题:你推送'promisesList',但是在'promises'上调用'.all'。我个人最小化使用'$ q.defer()' - $ http.get'的结果是一个承诺,所以你可以直接推送它。 –

OK设法解决它 我使用的服务功能的getService()和该函数返回的承诺,然后在每个呼叫我加入的getService()承诺返回promisesList这个名单我等待使用$全部,它的工作 非常感谢您的帮助。