【问题标题】:$q.all not resolving second array element$q.all 不解析第二个数组元素
【发布时间】:2017-05-03 12:31:45
【问题描述】:

我正在使用下面的 $q.all 来测试我的简单代码。一些 $q 如何花费很长时间来处理 promise 数组中的第二个并且我的后端服务器超时。当我在浏览器中看到“网络”选项卡时,getAccountStatementList 给了我 200 个状态,因为 getInvoiceDetails 在服务器超时之前一直显示挂起。我该如何解决这个问题?

var promises = [$http.get('getAccountStatementList'), $http.get('getInvoiceDetails')];

$q.all(promises).then(function(values){
    console.log("Values 0 "+values[0]); // value alpha
    console.log("Values 1 "+values[1]); // value beta
    complete();
});

【问题讨论】:

  • 这听起来像是后端服务器的问题,因为它永远不会完成第二个请求。看来您应该检查客户端的请求是否正确形成,如果是,则检查服务器代码以查看为什么它没有完成第二个请求。
  • 如果我同时在浏览器中直接运行第二个请求,我能够获取结果。
  • 另外,我交换了我的 promises 数组,现在我得到了 getInvoiceDetails 的 200 状态,而 getAccountStatementList 显示待处理

标签: angularjs promise q


【解决方案1】:

您可以使用catch 回调来捕获错误。

$q.all(promises).then(function(values){
    console.log("Values 0 "+values[0]); // value alpha
    console.log("Values 1 "+values[1]); // value beta
    complete();
}).catch(function(error){
   console.log(error)
})

这样做的缺点是即使一个承诺被拒绝,它也会立即来到catch。不等待批次的其余部分。

【讨论】:

  • 试过这个。但它是一样的。另外,我交换了我的 promises 数组,现在我得到了 200 状态的 getInvoiceDetails 和 getAccountStatementList 显示待处理
猜你喜欢
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 2015-01-08
  • 2015-05-23
  • 2015-11-14
相关资源
最近更新 更多