我有一个生成器方法,该方法将一些东西异步地添加到数组中,最后像下面这样生成每个带有yield* array
的成员:
while (!done) { await promise; yield* results; //<-- the array results = []; //its emptied so as to not to yield dupes done = !this.#eventsListened.has(eventName); }
但是我们友好的邻居tsc报告了一个错误,我什至无法开始理解它或如何解决它。谁能解释这个错误是什么意思,然后我应该怎么产生数组的内容?
整个生成器函数如下TS2766:由于'next'方法,无法将迭代委派给值的迭代器期望类型为'undefined',但是包含的生成器将始终发送“未知”。
编辑:
/**
* Returns an iterator that loops over caught events
* @yields Promise<Event|CustomEvent>
*/
async *on(eventName: string, options?: AddEventListenerOptions): AsyncGenerator<Event> {
if (this.#eventsListened.has(eventName)) {
return;
}
let results: Event[] = [];
let resolve: (value?: PromiseLike<Event> | Event) => void;
let promise = new Promise<Event>(r => (resolve = r));
let done = false;
this.#eventsListened.add(eventName);
if (typeof options === 'object' && typeof options.once !== 'undefined') {
throw new Error('options.once is not supported. Use EventTarget2.once instead');
}
const callback = (evt: Event) => {
results.push(evt);
resolve();
promise = new Promise<Event>(r => (resolve = r));
};
this.addEventListener('eventName', callback, options);
while (!done) {
await promise;
yield* results;
results = [];
done = !this.#eventsListened.has(eventName);
}
this.removeEventListener(eventName, callback);
}
我有一个生成器方法,该方法将一些内容异步地添加到数组中,并最终使每个成员具有yield *数组,如下所示:while(!done){等待promise;产量*结果; //
您的主要问题是AsyncGenerator<Event>
... ...由于您没有指定第三个通用参数,因此使用了默认值(unknown
),并且unknown
与undefined
不匹配。