js 如何停止异步代码的执行?

javascript 当前正在执行异步代码,当点击返回时,如何停止当前正在执行的异步代码?

阅读 5.9k
4 个回答

因为语言本身的设计上不存在一个用于取消异步操作的方式(类比其他语言像 C# 中的 CancellationToken、Java 中的 Future.cancel、Golang 中的 ChannelContext),所以除部分本身支持中止的对象外,像 clearTimeoutclearIntervalclearImmediateXMLHttpRequest.prototype.abort 等等,其他异步操作均无法手动中止。

W3C 提出了一个 AbortSignal 的想法用于中止一个未结束的 Promise 对象,但目前连草案都没有、所以更没有浏览器支持了。


P.S. axios 库实现了一个“伪 CancelToken”机制,仅仅是代码逻辑上可以中止一个 fetch,实际上只是做了一层封装而已,HTTP 请求还是会正常发出的,并非真正意义上的“中止”。如果已经能满足你的需求了的话,可以用它;感兴趣它是如何实现的请自行阅读源码。

原生 abort方法

axios CancelToken

这得看具体的异步方法是啥了.

在vue中,可以添加在beforeDestroy函数中,如果是setTimeout,或者setInterval这类的,可以接收返回值,在beforeDestory中clear掉例如this.time = setTimeout(_ => _),然后在beforeDestory函数中clearTimeout(this.time);如果是ajax里面的异步可以参考文章

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题