为什么下面的功能b(在Node JS中)跳过迭代? [重复]

问题描述 投票:-1回答:2

我正在研究Node JS如何执行代码。如果我在两个函数中都将'sleep'参数设置为1,则它将按预期工作。但是由于两个函数的延迟不同,它会以最长的延迟跳过该函数的迭代。我希望函数b记录从0到99的所有数字,但比函数a慢。

See the code in mycompiler.io

a()
b()

async function a() {
  for (n=1; n<100; n++) {
    console.log('a', n)
    await sleep(1)
  }
}

async function b() {
  for (n=1; n<100; n++) {
    console.log('b', n)
    await sleep(3)
  }
}

function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  })
} 
node.js asynchronous event-loop
2个回答
-1
投票

您正在使用全局n变量,当在一个函数中对其进行更改时,对于另一个函数也对其进行了更改。您应该有2个单独的变量,或者至少没有n作为全局变量。为此,您可以在for循环中的n前面添加关键字let,如下所示:


0
投票

正如注释中提到的@CertainPerformance,如果要使for循环在此处正确执行,则必须声明变量。 for(let n=1; n<100; n++)

© www.soinside.com 2019 - 2024. All rights reserved.