Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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 for循环中的异步回调失败_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript for循环中的异步回调失败

Javascript for循环中的异步回调失败,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在编写一个节点JS函数,它有一个对象数组,对于其中的每一项,我都需要调用异步函数 for (var i = 0; i < allCases.length; i++) { if (allCases[i].Case_ID != null) { Utils.findAndUpdate(allCases[i], function(response) { console.log('received in the callback ', respo

我正在编写一个节点JS函数,它有一个对象数组,对于其中的每一项,我都需要调用异步函数

for (var i = 0; i < allCases.length; i++) {

    if (allCases[i].Case_ID != null) {
        Utils.findAndUpdate(allCases[i], function(response) {
            console.log('received in the callback ', response);
        });
    } else {
        console.log('case id is null');
    }
}
for(var i=0;i
findAndUpdate是一个执行异步调用并在回调中返回结果的函数。当我在一个项目上尝试这个方法时,效果非常好,但是在循环中,当循环一步一步地进行并在回调仍在进行时到达终点时,它失败了

我还尝试了这种变通方法,只增加了回调成功中的“i”。但它会导致无限循环

for (let i = 0; i < allCases.length;) {

    if (allCases[i].Case_ID != null) {
        Utils.findAndUpdate(allCases[i], function(response) {
            console.log('received in the callback ', response);
            i++;
        });
    } else {
        console.log('case id is null');
    }
}
for(设i=0;i
我想知道如何解决这个问题,为什么这个变通方法失败了

试试这个:

allCases.forEach((case) => {
  if (case.Case_ID != null) {
      Utils.findAndUpdate(case, function (response) {
        console.log('received in the callback ', response);
      });
    } else {
      console.log('case id is null');
    }
  });
但是,如果您想链接请求,那么您应该摆脱循环,尝试以下方法:

allCases.forEach((case) => {
  if (case.Case_ID != null) {
      Utils.findAndUpdate(case, function (response) {
        console.log('received in the callback ', response);
      });
    } else {
      console.log('case id is null');
    }
  });
但是如果你想链接请求,那么你应该去掉你可以使用的循环

for(设i=0;i
您可以使用

for(设i=0;i
谢谢,它成功了。如果您的回答能说明这种方法为什么有效,我们将不胜感激。我还有一个问题,如何确定我到达了线程中的最后一个回调?谢谢,它起作用了。如果您的回答能说明这种方法为什么有效,我们将不胜感激。我还有一个问题,如何确定我到达了线程中的最后一个回调?谢谢,这也很有效。我还有一个问题,如何确定我到达了线程中的最后一个回调?请检查
i
的值是否应等于length-1Thanks,这同样有效。我还有一个问题,如何确定我到达了线程中的最后一个回调?请检查
i
的值是否应等于length-1