保证按顺序完成循环的Javascript异步可重用性?

保证按顺序完成循环的Javascript异步可重用性?,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,假设我有一个for wait循环,如下所示: const asyncIterable = { [Symbol.asyncIterator]() { return { i: 0, next() { if (this.i < 3) { return Promise.resolve({ value: this.i++, done: false }); } return Promise.res

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

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);
}
const asyncIterable={
[符号.异步迭代器](){
返回{
i:0,
下一个(){
如果(此.i<3){
返回Promise.resolve({value:this.i++,done:false});
}
返回Promise.resolve({done:true});
}
};
}
};
对于等待(让num of asyncIterable){
等待someAsyncFunction();/(*)
console.log(num);
}

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

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

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

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