如何终止前一个promise,或者阻止其回调执行?

我在短时间内发了两次请求 都是promise对象 那我在发后一次请求的时候怎么终止前面那个还没有返回的promise呢?
关注者
6
被浏览
24,708

3 个回答

可以用 Promise.race 模拟呀。

function getWithCancel(promise, token) {
   Promise.race([promise, new Promise((_, reject) => {
     token.cancel = function() {
       reject(new Error('cancel'))
     }
   })]).catch((e) => console.log(e))
};


var token = {};
var promise = fetch(xxxxx)
getWithCancel(promise, token)

token.cancel()

这样就能 cancel 掉前面的 Promise 了。


另外一些库也能实现,不过为了实现一个 cancel 功能引入一个库,有点不太划算哦

原生 Promise 现阶段并没有 Promise.cancel 方法。用库吧,Cancellation | bluebird

为什么?