【发布时间】:2012-12-18 23:38:25
【问题描述】:
我需要遍历一组对象并检查回调函数中的值。我的问题是,如果找不到值,我需要抛出一个错误,所以这需要在回调和循环之外。
现在我有这个:
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;
我的问题是,在我的回调检查可以检测是否满足条件之前,第二个 404 错误触发,所以一旦条件满足,我总是以 404 和第二个函数触发结束还有我的f.removeDocument(someID+x) 触发器。
我尝试从回调和循环中删除f.removeDocument(someID+x),只将变量设置为真/假,然后抛出我的错误或调用我的函数。但是,相同的结果 = 变量为 false 并在回调中设置为 true 之前引发错误。
我想我需要将我的404 错误放入循环和回调中,但我不知道如何确保它仅在循环完成且条件未满足时触发一次。
问题:
如何在循环中触发的回调函数中一次性抛出错误?
【问题讨论】:
-
addJob()是一个异步 AJAX 调用,我想..? -
@inhan:是的,我不能改变它。
-
那么当你得到任何响应时你就知道循环已经结束了,对吧?
-
我认为这是问题所在。循环完成,我在收到 AJAX 调用的响应并尝试检查条件之前抛出 404。
-
在外部范围内使用两个变量:每次 Ajax 作业完成时都会递增的计数器和记录任何 Ajax 调用是否成功的布尔值。对于每个 Ajax 解析,检查计数器是否处于阈值(即
response._conflicts.length),如果是,检查成功布尔值是否曾经设置为true。
标签: javascript loops callback throw