我怎么能这么做?
我的尝试:目前,我使用一个可访问所有函数的全局计数器,我在所有函数的开头增加和复制该计数器,并且每次调用异步函数时,我都会向其发送计数器的副本,然后我在子例程的开头和返回后立即检查全局计数器是否已更改,但是当您有许多对异步函数的嵌套调用时,维护起来确实很繁重(因为您需要重复并传递复制变量的值)所有呼叫)。此外,如果我们调用的异步函数不是我自己编写的,那么这将不起作用。所以我更喜欢这样的东西:
functionCurrentlyRun = null
async runFunction(f, args) {
if (functionCurrentlyRun) {
stopFunctionAndAllSubthreads(functionCurrentlyRun);
}
return await runAndSaveIn(f, args, functionCurrentlyRun)
}
async f1(args) {
return await someAsyncCalls();
}
f2(args) {
return await someAsyncCalls();
}
runFunction(f1, 42);
runFunction(f2, 43);
有点类似于 cancelAnimationFrame
所做的事情,但是对于任意函数。