1

我需要遍历一组对象并检查回调函数中的值。我的问题是,如果找不到值,我需要抛出一个错误,所以这需要在回调和循环之外。

现在我有这个:

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错误放在循环和回调中,但我不知道如何确保它只在循环完成且条件未满足时触发一次。

问题
如何在循环中触发的回调函数中一次性抛出错误?

4

1 回答 1

2

这看起来像一个异步问题。要将回调作为一种连接操作处理,您需要等待最后一个回调。像这样的模式可能会有所帮助:

var join = (function(n, fn) {
  return function() {
    if(--n === 0) {
      fn();
    }
  }
}) (response._conflicts.length, function() {
  // Check the conditions
});

The join function will count down the required number of times and then allow you to perform the rest of the checking after the last call has completed. You will need to trigger join() in your request callback.

于 2013-01-04T14:22:41.410 回答