我们知道 Promise
一旦实例化之后,状态就只能由 Pending
转变为 Rejected
或者 Fulfilled
, 本身是不可以取消已经实例化之后的 Promise
了。
但是我们可以通过一些其他的手段来实现终止 Promise
的继续执行来模拟 Promise
取消的效果。
我们都知道 Promise.race
方法接收多个 Promise
,一旦这些 Promise
中任意一个 Promise
存在 resove
或者 reject
其他的 Promise
就不会执行了,基于这个特点,我们可以构造代码实现终止 Promise
的执行
从上面的输出可以看到此时第二个 promise
resolve 的结果并没有输出,因此使用 Promise.race
还是可以达到终止一个 Promise
继续执行的目的。
Promise.race
只要有一个promise
的状态发生了变化,不管是resolve
还是reject
都会忽略掉其他的 promise 的 resolve 还是 reject, 因此这也是上面控制台没有输出 第二个 promise 中 resolve 的值,但是却输出了 第二个 promise 中的 console.log
通过 abortController.abort()
的方式实现终止Promise
的执行
测试代码:
执行结果:
Bluebird作为一个基于 Promises/A+ 标准的社区的第三方库 Promise 库 , 比 async 还早出现,提供了很多原生标准没有的一些方法功能,例如这里的 cancel 取消promise 的功能,更多的细节或其他功能可以参考官网。
以下是 cancel promise 的代码示例:
相信通过上面的介绍,你已经掌握了如何在面试中回答终止一个 promise 这个面试题的精髓了。
如果这篇文章对你有帮助,欢迎点赞、关注➕、转发 ✔ !
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。