我有一个函数,它使用for
循环的promises顺序响应异步调用,但是当我从代码中获得异常时循环中断,但是我想继续我的循环,即使在异常抛出之后功能
我的异步功能是
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
上抛出错误后停止循环,但我想继续{10}条目的for
循环。
任何帮助将不胜感激。
答案 0 :(得分:0)
正如我在评论中所说,错误可能被视为特殊值,因此您可以在链承诺后执行特殊行为。
试试这段代码:
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) {
console.log(ex); // do not throw error but handle the error
});
}).catch(function(ex) { throw ex });
})(i);
};
return chain
}