javascript 当前正在执行异步代码,当点击返回时,如何停止当前正在执行的异步代码?
在vue中,可以添加在beforeDestroy函数中,如果是setTimeout,或者setInterval这类的,可以接收返回值,在beforeDestory中clear掉例如this.time = setTimeout(_ => _)
,然后在beforeDestory函数中clearTimeout(this.time)
;如果是ajax里面的异步可以参考文章
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
因为语言本身的设计上不存在一个用于取消异步操作的方式(类比其他语言像 C# 中的
CancellationToken
、Java 中的Future.cancel
、Golang 中的ChannelContext
),所以除部分本身支持中止的对象外,像clearTimeout
、clearInterval
、clearImmediate
、XMLHttpRequest.prototype.abort
等等,其他异步操作均无法手动中止。W3C 提出了一个
AbortSignal
的想法用于中止一个未结束的Promise
对象,但目前连草案都没有、所以更没有浏览器支持了。P.S. axios 库实现了一个“伪 CancelToken”机制,仅仅是代码逻辑上可以中止一个
fetch
,实际上只是做了一层封装而已,HTTP 请求还是会正常发出的,并非真正意义上的“中止”。如果已经能满足你的需求了的话,可以用它;感兴趣它是如何实现的请自行阅读源码。