取消ES6承诺

时间:2016-06-14 22:50:53

标签: javascript node.js ecmascript-6 es6-promise

是否可以通过拨打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

2 个答案:

答案 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)