generated at
getPromiseSettledAnytimes

mod.ts
export function getPromiseSettledAnytimes<T, E = unknown>() { let _resolve: ((value: T) => void) | undefined; let _reject: ((value: E) => void) | undefined; const waitForSettled = () => new Promise<T>( (res, rej) => { _resolve = res; _reject = rej; }, ); const resolve = (value: T) => _resolve?.(value); const reject = (reason: E) => _reject?.(reason); return [waitForSettled, resolve, reject] as const; }

Async Generatorを使わずとも、これでevent listenerをwrapして while(true) {...} で呼び出せば同じことを実現できるんじゃないか?
ts
const [waitMove, resolve] = getPromiseSettledAnytimes<MouseEvent>(); addEventListener("mousemove", resolve); addEventListener("mouseup", resolve); while (true) { const moveEvent = await waitMove(); if (moveEvent.type === "mouseup") break; // ... } removeEventListener("mousemove", resolve); removeEventListener("mouseup", resolve);
というか、async-awaitでeventを同期的に書いてみるで採用されている方法がそもそもこれだったのか
一周回って戻ってきた

#2021-11-03 17:47:29 as const が抜けてた
#2021-10-21 13:41:36 default型引数、例を追加
#2021-10-18 12:36:55 fulfilledじゃなくてsettledだった
#2021-10-17 22:15:41