【发布时间】:2019-11-22 20:28:35
【问题描述】:
当其中一个被拒绝/解决时,promise.race 不应该终止所有承诺吗?
var cancelDeferred = new cancellation()
Promise.race([cancelDeferred.promise, new Promise( (res, req) => {
setTimeout(() =>{
console.log("hey")
}, 2000)
})]).catch(e =>{
console.log(e)
})
setTimeout(() => {cancelDeferred.cancel()}, 500);
function cancellation () {
const token = {};
token.promise = new Promise((_, reject) => {
token.cancel = () => reject(new Error('cancelled'));
});
return token;
}
在这段代码中,一个承诺在 500 毫秒后被取消,所以这应该导致 .catch 到控制台日志,对吗?
不,它仍然记录“嘿”,这是为什么呢?
【问题讨论】:
-
不,承诺不能被“终止”。它不知道应该怎么做
clearTimeout。
标签: javascript promise cancellation