如果一个承诺失败,$q.all() 不调用失败处理程序
$q.all() not calling fail handler if one promise fails
只是想了解 $q.all()
的工作原理:
在我的示例中,我使用 $q.all()
来执行 2 个函数(都是故意 return reject()
),我希望 fail
处理程序在 then()
被调用,但没有调用,为什么会这样?
代码:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope,$q) {
f1 = function(){
return $q.defer().reject();
}
f2 = function(){
return $q.defer().reject();
}
s = function(){alert('success!'); };
f = function(){alert('failed!');};
$q.all([f1(),f2()]).then(s,f);
}
Fiddle:
http://jsfiddle.net/sajjansarkar/ADukg/10942/
编辑:
我发现如果我将函数 return 设为原始 promise 并在拒绝它之前引入延迟,则相同的代码可以工作。
应该是:
f2 = function(){
var p = $q.defer();
p.reject();
return p.promise;
}
或
f2 = function() {
return $q.reject()
}
只是想了解 $q.all()
的工作原理:
在我的示例中,我使用 $q.all()
来执行 2 个函数(都是故意 return reject()
),我希望 fail
处理程序在 then()
被调用,但没有调用,为什么会这样?
代码:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope,$q) {
f1 = function(){
return $q.defer().reject();
}
f2 = function(){
return $q.defer().reject();
}
s = function(){alert('success!'); };
f = function(){alert('failed!');};
$q.all([f1(),f2()]).then(s,f);
}
Fiddle:
http://jsfiddle.net/sajjansarkar/ADukg/10942/
编辑:
我发现如果我将函数 return 设为原始 promise 并在拒绝它之前引入延迟,则相同的代码可以工作。
应该是:
f2 = function(){
var p = $q.defer();
p.reject();
return p.promise;
}
或
f2 = function() {
return $q.reject()
}