如何取消未完成的 Promise 请求

· 约 4 分钟读完

在前端开发中,我们经常会使用 Promise 来处理异步请求。但是,一旦请求发出后,我们有时候需要取消它,比如用户在输入框中输入了新的内容,而之前的请求已经失效了。本文将介绍如何取消未完成的 Promise 请求。

Promise 的基本使用

首先,我们来回顾一下 Promise 的基本使用方法。

上面的代码创建了一个 Promise 对象,其中包含一个异步操作。当异步操作完成后,调用 resolve 方法将结果传递给 then 方法,调用 reject 方法将错误传递给 catch 方法。

取消 Promise 请求的方法

Promise 本身并没有提供取消请求的方法,但是我们可以通过一些技巧来实现。

方法一:使用 AbortController

AbortController 是一个新的 Web API,它可以用来取消网络请求、定时器等操作。我们可以通过 AbortController 来取消 Promise 请求。

上面的代码中,我们创建了一个 AbortController 对象,并通过它的 signal 属性获取一个 AbortSignal 对象。然后将 AbortSignal 对象传递给 Promise 的异步操作中,当调用 abort 方法时,AbortSignal 对象会发出一个中止信号,从而中止 Promise 请求。

方法二:使用 Promise.race

Promise.race 方法可以将多个 Promise 对象合并成一个 Promise 对象,并返回最先完成的 Promise 对象的结果。

我们可以利用这个特性,将 Promise 对象和一个包含取消标记的 Promise 对象一起传递给 Promise.race 方法,当取消标记的 Promise 对象完成时,Promise.race 方法会返回它的结果,从而中止 Promise 请求。

上面的代码中,我们创建了一个包含取消标记的 Promise 对象 cancelPromise,当它完成时,会返回一个包含错误信息的 Promise 对象。然后将 cancelPromise 和实际的 Promise 对象一起传递给 Promise.race 方法,当 cancelPromise 完成时,Promise.race 方法会返回它的结果,从而中止 Promise 请求。

小结

本文介绍了如何取消未完成的 Promise 请求,包括使用 AbortController 和 Promise.race 两种方法。在实际开发中,我们可以根据具体场景选择合适的方法来取消 Promise 请求,从而提高应用程序的性能和用户体验。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d53cb8a941bf71349ae865