这里用到一个特殊的类型 Event,它的代码是这样:
class Event {
constructor() {
this.flag = false;
this.value = null;
this.waiters = [];
}
isSet() {
return this.flag;
}
set(value) {
this.value = value;
if (!this.flag) {
this.flag = true;
while (this.waiters.length > 0) {
let waiter = this.waiters.shift();
waiter.resolve(value);
}
}
}
clear() {
this.flag = false;
this.value = null;
}
async wait() {
if (this.flag) {
return this.value;
}
let waiter = {};
let promise = new Promise((resolve, _) => {
waiter["resolve"] = resolve;
});
this.waiters.push(waiter);
return await promise;
}
}
【 在 hgoldfish (老鱼) 的大作中提到: 】
: generator 就是 coroutine. 以下是一段使用 coroutine 实现 generator 的代码:
: async generator(result) {
: for (int i = 0; i < 10; ++i) {
: ...................
--
FROM 110.85.22.*