codehz
300 天前
首先你肯定得重构代码,我这里提供一个较为简单的方案
开一个池子
class MyPromisePool {
#data: Promise<void>[] = [];
add(promise: Promise<void>) { this.#data.push(promise); }
async [Symbol.asyncDispose]() {
await Promise.all(this.#data);
}
}
在顶层函数使用,例如
async function entry() {
await using pool = new MyPromisePool();
//需要的时候就往 pool 里塞 promise
pool.add(asyncfn());
//尾部不用手动写其他代码,ts 会帮你生成合适的代码
//会自动调用 Promise.all 去等待结束
//侵入性更小* (意味着不需要去跟踪函数是怎么结束的,你直接写 return 就好
}