是否可以通过调用 Promise.reject(reason)
来取消 ES6 Promise?
类似这样的事情:
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
“取消” promise 有什么缺点吗?
最佳答案
不,您不能使用 Promise.reject()
取消 promise 。
Promise.reject()
只是一个辅助函数,它返回一个新的已拒绝的 Promise。
举个例子,如果你已经有一个 promise p
,那么就无法取消它:
var p = fetch("flower.png");
// No way to reject p or "cancel" the fetch.
重要的是,p
不是 fetch
的控制界面。您所能做的就是拒绝随后的链式 promise :
p = p.then(result => cancel? Promise.reject(new Error("Cancelled")) : result);
或者直接忽略p
,效果相同。
也就是说,您的代码看起来不错,但与您的问题不匹配。大多数人认为这是错误处理或拒绝传播,而不是取消,尽管它确实破坏了后续异步操作的链,如您所示。
关于javascript - 取消 ES6 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37823386/