【发布时间】:2018-01-03 08:03:45
【问题描述】:
我有一个函数,它使用 for 循环的承诺按顺序给我响应异步调用,但是当我从代码中得到异常时循环中断,但即使在函数抛出异常后我也想继续我的循环。
我的异步函数是
function asyncFun(a) {
var q = $q.defer();
setTimeout(function(){
if(a == 4) throw new Error('custom error');
q.resolve(a);
}, 1000);
return q.promise;
}
链函数是
function getData() {
var chain = $q.when();
for (var i = 0; i < 10; i++) {
(function(i) {
chain = chain.then(function() {
return asyncFun(i).then(function(res) {
console.log(res);
}).catch(function(ex) {
throw ex;
});
}).catch(function(ex) { throw ex });
})(i);
};
return chain
}
当我调用getData(); 时,它会在i = 4 上引发错误后停止循环,但我想继续for 循环以获取所有 10 个条目。
任何帮助将不胜感激。
【问题讨论】:
-
你将如何解决这个错误?当您继续执行循环时,您的承诺之一不会被拒绝。也许您应该将该错误视为特殊值并在解决正常值时解决它。
-
我的
asyncFun在某些情况下预定义了抛出错误,这就是为什么我需要更改getData来完成循环。 -
为什么在不了解问题的情况下否决了这个问题
-
我没有否决这个问题。也许是另一个人......
标签: javascript angularjs node.js promise q