【发布时间】:2021-06-07 15:55:57
【问题描述】:
现在这段代码可以正常工作了
async *[Symbol.asyncIterator](){
var promise;
while (true){
promise = this.#HEAD.promise;
this.size--;
this.#HEAD.next ? this.#HEAD = this.#HEAD.next
: this.#LAST = void 0;
yield await promise;
};
};
如果我不想使用 async / await 抽象,那么我如何仅使用 Promise 实现相同的功能?
我天真地尝试过
*[Symbol.asyncIterator](){
var promise;
while (true){
promise = this.#HEAD.promise;
this.size--;
this.#HEAD.next ? this.#HEAD = this.#HEAD.next
: this.#LAST = void 0;
promise.then(yield);
};
};
但它返回undefined;假设yield 不是函数。我检查了this 的问题,但这与生成器无关,也没有涉及yield。有没有办法实现这个?
编辑: yield await promise 在异步生成器中似乎很浪费。请改用yield promise。检查 T.J. 下的 cmets。人群回答。
【问题讨论】:
-
旁注:在异步迭代器代码中修改
this.size看起来非常可疑。迭代器永远不应该改变它们正在迭代的状态。
标签: javascript asynchronous async-await iterator generator