【问题标题】:Javascript async iterables for loop guaranteed to finish in order?Javascript异步迭代循环保证按顺序完成?
【发布时间】:2020-04-30 21:39:53
【问题描述】:

假设我有一个 for await 循环,如下所示:

const asyncIterable = {
  [Symbol.asyncIterator]() {
    return {
      i: 0,
      next() {
        if (this.i < 3) {
          return Promise.resolve({ value: this.i++, done: false });
        }

        return Promise.resolve({ done: true });
      }
    };
  }
};

for await (let num of asyncIterable) {
  await someAsyncFunction(); // (*)
  console.log(num);
}

在这种情况下,是否可以保证按预期顺序打印出数字?换句话说,即使 for 循环本身包含异步调用(如 (*) 标记的行),是否保证 for 循环的每次迭代都在下一次开始之前完成执行?

【问题讨论】:

  • 将 await 视为一种“在完成此步骤之前不要继续”

标签: javascript asynchronous async-await


【解决方案1】:

是的。这与异步迭代无关,对于每一种控制流语句(包括循环)都是如此,它会在 await 语句上暂停。

for await 循环不会以某种方式使其迭代同时运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多