Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript循环中触发的回调函数中抛出错误?_Javascript_Loops_Callback_Throw - Fatal编程技术网

如何在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