1
musi 309 天前 via iPhone
建议重构代码
|
2
yggd 309 天前
Promise.all
|
3
crysislinux 309 天前 via Android
实在不想重构的话。加一个方法,每执行一个 a 里面的方法就计数加 1 ,到所有方法的数量后就 call 你想做的操作。
|
4
crysislinux 309 天前 via Android
话说你这异步的都没有 await 么。不然你要的时间点不是很自然么。
|
5
okakuyang 309 天前
这个问题非常好,可以深度挖掘一下。通过查找父函数调用的所有子函数的名称取得所有子函数名,对所有子函数使用代理修改行为,最后通过计数的方式获取到所有子函数执行完的时间点。
|
6
totoro52 309 天前
我的建议是,丢给 gpt
|
7
jiangzm 309 天前
主要是异步方法, 建议传回调方法,在 a 方法关键位置回调
|
8
codehz 309 天前
首先你肯定得重构代码,我这里提供一个较为简单的方案
开一个池子 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 就好 } |
9
fuyun 309 天前
异步处理的实现太多了:
1 、Promise.all 2 、async 、await 3 、async 库 4 、RxJS ,可以使用诸如 combineLatest 等方法 |
10
Chuckle 309 天前
这个 a 方法返回啥,返回 promise 那就 await 就行了,子方法都是 promise 那就 Promise.all()等所有子方法完成。
要是 a 里就是几百个定时器啊、请求啊之类的异步任务,乱糟糟。。。。那没办法了,改代码吧,用生成器。。。往一个个小异步任务结束位置里塞 next(),生成器里用同样数量的 yield 接一下。 |
11
bianhui 309 天前
在所有方法调用完之后,.then 不就好了么
|
12
lsk569937453 309 天前
能不用 promise 就不用 promise ,理解起来太难了,async 香的很。
|