如何在循环中使用等待/异步

时间:2020-05-15 01:10:45

标签: node.js for-loop asynchronous async-await

为什么代码以这种方式打印?

等待不能在循环下使用吗?

>>>>> START
1

预期结果为'>>>>> START 1 2 3 >>>>> END'

let arr = [1, 2, 3]
async function print() {
  for (let n of arr) {
    await new Promise(
      resolve => {
        setTimeout(() => {
          console.log(n);
          resolve;
        }, 1000)
      }
    );
  }
}

async function main() {
  console.log(">>>>> START");
  await print();
  console.log(">>>>> END");
}

main()

1 个答案:

答案 0 :(得分:0)

简单的错字,您没有调用resolve函数。您需要实际调用它,否则您的承诺将永远无法解决,您的代码将永远不会继续(请注意,在resolve函数中,print之后加上括号):

async function print() {
  for (let n of arr) {
    await new Promise(
      resolve => {
        setTimeout(() => {
          console.log(n);
          resolve(); // invoke the function
        }, 1000)
      }
    );
  }
}

此外,每个console.log调用都会在新行上打印,因此输出将不会完全符合您的期望,而是更像是:

>>>>> START
1
2
3
>>>>> END
相关问题