当前位置: 首页 > 面试题库 >

(JavaScript)将forEach循环与内部回调同步

丁俊智
2023-03-14
问题内容

我正在forEach像这样的双循环内进行一些计算:

array.forEach(function(element){
    Object.keys(element).forEach(function(key){

        /* some complex computations with asynchronous callbacks  */

    });
});

someFunctionHere();

有没有办法让Loop在执行someFunctionHere( )功能之前先完成?或程序在继续执行someFunctionHere( )
之前知道循环是否完成的任何方式

我可能会错过一些论坛,但是我发现的那些论坛并没有帮助我实现我想要实现的目标,而且我在NodeJS中做到了这一点,同时我也在问是否有现有的图书馆可以实现这一目标。

我忘了加起来,还是应该再问一个问题?

有没有一种方法可以同步进行迭代,即仅在当前迭代完成后才继续进行下一个迭代?(非常遗憾)

谢谢你的帮助…


问题答案:

看一下async.js,尤其是其控制流语句,例如each
whilstuntil

使用async.js,您可以获得想要的东西。

在您的实际情况下,您需要的是each函数(以前称为forEach),eachSeries或者不是并行运行单个迭代,而是串行运行的函数(有关详细信息,请参见eachSeries的文档)。

举个例子:

async.eachSeries([ 2, 3, 5, 7, 11 ], function (prime, callback) {
  console.log(prime);
  callback(); // Alternatively: callback(new Error());
}, function (err) {
  if (err) { throw err; }
  console.log('Well done :-)!');
});

这将遍历素数数组,并以正确的顺序依次打印,最后打印出来Well done :-)!



 类似资料:
  • 目前生产出现了,handleDealData()返回的结果是[],并非是forEach执行后的数组,此问题偶发。 但是查了资料,解释说forEach的循环是同步任务。 chrome测试正常,返回非[] forEach的执行顺序是否跟机型、浏览器有关?

  • 大家好,我正在尝试在while循环中创建foreach循环。在foreach循环中,我试图生成包含div的列表元素,但我有非常奇怪的输出 这是我的密码 这是我的调试器consonle中的一个图像 正如你在图片中看到的,在ul标签中只存在一个li,其余的都在ul /ul. 我的第一个想法是,将div标记放在li标记中是无效的,但如果在文件的顶部使用它,则不是这样 DOCTYPE html PUBLI

  • 我在一个循环中调用了一个异步函数来发送电子邮件,但是有一段时间控件没有返回,也没有发送电子邮件,但是主UI线程完成了。 当我把等待任务。WhenAll(发送电子邮件任务);循环内的线工作正常,但当我把这条线放在循环外时,它不工作,但实际上它应该在循环外。我在sendEmail方法中有很多异步方法,所以我认为有些线程彼此重叠。任何线索。

  • 问题内容: 我正在尝试使用for循环在数组内创建一个数组-这是我的代码: 不幸的是,这给了我一个 “解析错误:语法错误,意外的T_CONSTANT_ENCAPSED_STRING,预期为’)’” 对于该行: 对于出了什么问题,我有些茫然-非常感谢您的帮助。$ clients是在其他地方定义的,所以这不是问题。 问题答案: 那是无效的语法。您必须首先构建数组的“父”部分。然后使用foreach循环添

  • 问题内容: 我正在React中尝试做类似以下的事情(其中ObjectRow是一个单独的组件): 我意识到并理解为什么这是无效的,因为它映射到函数调用。但是,由于来自模板领域并且是的新手,所以我不确定如何实现上述目标(多次添加组件)。 问题答案: 就像您只是在调用JavaScript函数一样。您不能使用循环来调用函数的参数: 查看如何将函数作为参数传递给循环,这当然是语法错误。 但是您可以创建一个数

  • foreach循环遍历列表值并将控制变量(var)依次设置为列表的每个元素 - 语法 (Syntax) Perl编程语言中foreach循环的语法是 - foreach var (list) { ... } 流程图 (Flow Diagram) 例子 (Example) #!/usr/local/bin/perl @list = (2, 20, 30, 40, 50); # foreach lo