我正在尝试构建$http.get
个['Thing1', 'Thing2', 'Thing3', ...]
个请求,然后让它们通过它们,并在此过程中获得进度通知。
我对如何做到这一点有一般的想法,但由于某种原因,我最终得到了所有20个HTTP调用并同时返回。通知永远不会运行。
基本上是for和Things of Things {{1}}我想创建一个$ http.get请求。虽然正在执行这个$ http调用数组,但我希望获得当前进度(1/3完成),直到完成所有操作然后再运行一个函数。
感谢任何帮助,谢谢!
答案 0 :(得分:0)
flags = 0
rqsts = [
$http.get(url1)
.then (rsp)->
flags++
rsp.data.data
.catch (err)->
# key here is to NOT reject but pass a successful failure
# otherwise $q.all will bomb out
err
.....
$http.get(urlN)
.then (rsp)->
flags++
rsp.data.data
.catch (err)->
# key here is to NOT reject but pass a successful failure
# otherwise $q.all will bomb out
err
]
$q.all(rqsts)
然后在你的UI中你可以看到rqsts.length上的标志,看看有多少已完成。
修改强>
我添加了一个示例,说明如何解决/拒绝单个请求增加计数器,而某些计数器仍处于待处理状态。这是在coffeescript&玉\ö/
codepen - http://codepen.io/jusopi/pen/admNmm?editors=101
在各种评论和其他答案中都有说明:
作为@jusopi的评论,值得注意的是每次响应获得成功结果时都会调用最后一个回调(通知回调)。
此外,在解决或拒绝承诺之前,可以将通知回调调用零次或多次以提供进度指示。
这仅适用于承诺的单一实例。在问题的上下文中,只有在所有服务器请求已解决后才会触发此通知。它不会为每个服务器请求触发通知,因为这是所述服务器请求的责任。
以下是相关问题/答案 - https://stackoverflow.com/a/28322945/1121919
答案 1 :(得分:-1)
根据文件
然后(successCallback,errorCallback,notifyCallback) - 无论何时或将要解析或拒绝承诺,然后在结果可用时立即异步调用其中一个成功或错误回调
所以基本上让我们有一堆承诺
var req1 = $http.get('url1');
var req2 = $http.get('url2');
var req3 = $http.get('url3');
var req4 = $http.get('url4');
//do stuff when all of them are resolved
var promiseArray = [req1, req2, req3, req4];
$q.all(promiseArray).then(function(successResponse){ //success callback - it's ok
//do stuff with my success execution
}, function(errorResponse){ //error callback - it has errors
//throw exception
}, function(notificationResponse){ //notification callback - do stuff while executing
//notify my stuff execution
});
就是这样。死简单
作为@jusopi的评论,值得注意的是每次响应获得成功结果时都会调用最后一个回调(通知回调)。
此外,在解决或拒绝承诺之前,可以将通知回调调用零次或多次以提供进度指示。
如需进一步阅读,请参阅此link