Angular中处理多个承诺的正确方式
Proper way of dealing with multiple promises in Angular
在多个$http请求完成后触发函数的正确方法是什么?我有两个选择,但我不确定哪一个是正确的。请注意,在' 1 '和' 2 '完成后,都记录'done'。
首先,我只是把所有的$http请求推到一个数组,并使用$q.all(promises).then
来触发最后的回调,我不记得我在哪里看到了这一点,但它似乎工作得很好(可能是因为我的localhost处理请求的速度很快):
var one = $http.get("/request/one/"),
two = $http.get("/request/two/"),
promises;
one.then(function(response){
console.log('one');
});
two.then(function(response){
console.log('two');
});
promises = $q.all([one, two]);
promises.then(function(){
console.log('done');
});
第二,我在一些教程中见过它,包括https://egghead.io/lessons/angularjs-q-all:
var one = $q.defer(),
two = $q.defer(),
promises;
$http.get("/request/one/").then(function(response){
one.resolve('one');
});
$http.get("/request/two/").then(function(response){
two.resolve('two');
});
promises = $q.all([one.promise, two.promise]);
promises.then(function(result){
console.log('done');
});
您绝对应该采用第一种方法。第二个创建了两个不必要的承诺。$http
已经返回承诺,因此不需要用$q.defer()
再创建两个承诺。
相关文章:
- 在承诺链中处理早期回报的最佳方式
- 链接承诺和传递价值的简洁方式
- 以处理错误的方式启动javascript承诺蓝鸟链
- 用 ES6 承诺以习惯方式处理先决条件
- Javascript Jquery在外部样式表更改/重新加载承诺方式后执行代码
- 使用承诺进行分页的最佳方式是什么?
- 使用承诺以递归方式检索分页数据
- 用q创造承诺的另一种方式
- 以棱角分明的方式解决包装的承诺
- 承诺在以不同方式执行时显示不同的结果
- 有没有一种优雅的方式将承诺联系在一起
- 什么'这是等待指令中启动的承诺得到解决的最佳方式
- 正确的方式来解决一个对象将被扩展后,解决不同的承诺
- 两种承诺链实现方式的区别
- 有没有一种更干净的方式来把这些蓝鸟的承诺联系起来
- 在一个库被添加/下载并以承诺的方式执行后,是DOM中的元素
- 调试承诺的最佳方式是并行运行
- 以小并发批方式运行承诺(一次不超过X个)
- 保持Q.all承诺序列聚合的干净方式
- Angular中处理多个承诺的正确方式