是否可以通过拨打Promise.reject(reason)
取消ES6承诺?
这样的事情:
Promise.resolve().then(function () {
return 'foo';
}).then(function () {
return console.log('we were here');
}).then(function () {
return Promise.reject({type: 'canceled'})
}).then(function () {
return console.log('never visited');
}).catch(function (e) {
console.log(e);
});
取消"取消"是否有任何缺点承诺通过Promise.reject
?
答案 0 :(得分:2)
不,您无法取消Promise.reject()
的承诺。
Promise.reject()
只是一个辅助函数,它返回一个新的已被拒绝的promise。
例如,如果您已经有一个承诺p
,那么就无法取消它:
var p = fetch("flower.png");
// No way to reject p or "cancel" the fetch.
重要的是,p
不是fetch
的控制界面。你所能做的只是拒绝随后的链接承诺:
p = p.then(result => cancel? Promise.reject(new Error("Cancelled")) : result);
或者只是忽略具有相同效果的p
。
那就是说,你的代码看起来很好,但与你的问题不符。大多数人认为这是错误处理,拒绝传播,而不是取消,尽管它确实打破了后续异步操作的链条,如你所示。
答案 1 :(得分:0)