求教!!!
切换场景时如何中止 promise 防止执行为null,中止promise的执行有什么好的方法吗
protected readonly asyncToken: AsyncToken = { cancel: function () { } }
/**
* 执行一个异步方法 随时可已中断
* @param asyncFunc 要执行的异步方法
* @param args 可变参数
*/
async runAsync(asyncFunc: Function, ...params: any) {
let cancelled = false
this.asyncToken.cancel = () => {
cancelled = true
}
const data = await wrapWithCancel(asyncFunc)(...params)
if (cancelled) {
throw { reason: '中断异步执行' }
}
return data
function wrapWithCancel(fn): any {
return data => {
if (!cancelled) {
return fn(...params)
}
}
}
}
用这个封装一下 想要中断的时候调用 asyncToken.cancel 就行了
一个思路为,可以不终止Promise,只在Promise执行完毕的时候,检查是否还需要执行Promise的then/catch逻辑。比如 then 之后,检查场景是否还存在,如果存在就更新场景Label
谢谢了!我试试看
谢谢提供思路!