【问题标题】:AngularJS Promises and $http.getAngularJS 承诺和 $http.get
【发布时间】:2017-04-01 20:53:39
【问题描述】:

我正在尝试使用 $q.defer、$q.all 和 promises 来等待 http 请求列表

我使用此代码调用 $q.all

$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 的长度以及使用 console.log 的 pData 我得到的是 0 的长度,看起来像 0 个对象,但是当我打开它时,看起来所有对象都在每个特定调用的 $http.get 调用中初始化,这让我确保 $http.get 响应已收到,这是一个有效的回复。

另外 $all 根本没有被调用有什么问题?

感谢您的帮助

【问题讨论】:

  • 一种可能性是您没有得到每个请求的成功响应。如果您有 400 响应,则视为对 $http.get 的拒绝。另一个是 .then() 中的直接运行时错误(我看不到 pData 声明,所以 .push 可能会失败。
  • 请提供minimal reproducible example。也不需要使用$q.defer(),因为$http 本身会返回一个承诺
  • 其他问题:你推promisesList,但在promises上调用.all。就个人而言,我尽量减少使用$q.defer()——$http.get 的结果无论如何都是一个承诺,所以你可以直接推送它。
  • 什么是pdatapromisespromisesList 一样吗?

标签: javascript angularjs http


【解决方案1】:

OK 已修复 我使用了服务函数 getService() 并且这个函数返回了承诺然后在每次调用中我添加了 getService() 承诺返回到 promisesList 这个列表我等待使用 $all 并且它有效 非常感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 2014-07-18
    • 2014-02-02
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多