我需要遍历一组对象并检查回调函数中的值。我的问题是,如果找不到该值,我需要抛出一个错误,所以这需要在回调和循环之外。
现在我有这个:
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)
并仅将变量设置为 true/false,然后抛出我的错误或调用我的函数。但是,相同的结果 = 变量为 false 并在回调中将其设置为 true 之前抛出错误。
我想我需要将我的 404
错误放在循环和回调中,但我不知道如何确保它只在循环完成且条件尚未完成时触发一次被遇见。
问题:
如何在循环触发的回调函数中抛出 ONCE 错误?
最佳答案
这看起来像是一个异步问题。要将回调作为一种连接操作来处理,您需要等待最后一个回调。像这样的模式可能会有所帮助:
var join = (function(n, fn) {
return function() {
if(--n === 0) {
fn();
}
}
}) (response._conflicts.length, function() {
// Check the conditions
});
join 函数将倒计时所需的次数,然后允许您在最后一次调用完成后执行剩余的检查。您需要在请求回调中触发 join()
。
关于javascript - 如何在 Javascript 循环中触发的回调函数中抛出一次错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158725/