如何在Javascript循环中触发的回调函数中抛出错误?
我需要循环一组对象并检查回调函数中的值。我的问题是,如果找不到该值,我需要抛出一个错误,因此这需要在回调和循环之外 现在我有这个:如何在Javascript循环中触发的回调函数中抛出错误?,javascript,loops,callback,throw,Javascript,Loops,Callback,Throw,我需要循环一组对象并检查回调函数中的值。我的问题是,如果找不到该值,我需要抛出一个错误,因此这需要在回调和循环之外 现在我有这个: for (i = 0; i < response._conflicts.length; i += 1){ del_rev = response._conflicts[i]; // retrieve a document that.addJob( "get", someID
for (i = 0; i < response._conflicts.length; i += 1){
del_rev = response._conflicts[i];
// retrieve a document
that.addJob(
"get",
someID,
options,
// callback
function (response) {
if (condition 1) {
if (condition 2){
console.log("gotcha");
// run a function
f.removeDocument(someID+x);
return;
}
}
},
function (err) {
that.error({ "status": 123 });
}
);
} // end of loop
// now if the loop turns out no results, I need to throw this error
that.error({ "status": 404 });
return;
for(i=0;i
我的问题是,第二个404
错误会在我的回调检查能够检测到条件是否满足之前触发,因此我总是以一个404
和第二个函数触发结束,一旦条件满足,我的f.removeDocument(someID+x)
触发
我尝试从回调和循环中删除f.removeDocument(someID+x)
,只将变量设置为true/false,然后抛出错误或调用函数。但是,相同的结果=该变量为false,并在回调中将其设置为true之前抛出错误
我想我需要将我的404
错误放入循环和回调中,但我不知道如何确保它只在循环完成且条件未满足时触发一次
问题:如何在循环中触发的回调函数中抛出错误?这看起来像是异步问题。要将回调作为一种连接操作来处理,您需要等待最后一次回调。这样的模式可能会有所帮助:
var join = (function(n, fn) {
return function() {
if(--n === 0) {
fn();
}
}
}) (response._conflicts.length, function() {
// Check the conditions
});
join函数将倒计时所需的次数,然后允许您在最后一次调用完成后执行剩余的检查。您需要在请求回调中触发
join()
。addJob()
我想是一个异步AJAX调用吧?@inhan:是的,我无法更改它。然后,当您收到任何响应时,您就会意识到循环已经完成了,对吗?我想这就是问题所在。循环完成了,在从AJAX调用获得响应并尝试检查条件之前,我将抛出404。在外部范围中使用两个变量:每次AJAX作业完成时递增的计数器和记录任何AJAX调用是否成功的布尔值。对于每个Ajax分辨率,检查计数器是否处于阈值(即响应。_conflicts.length
),如果是,检查成功布尔值是否设置为true
。