javascript - 取消 ES6 promise

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

是否可以通过调用 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/

相关文章:

javascript - 在 reactjs 中使用 forEach 读取数组元素

windows - 检测可执行文件是否存在于具有 Node 的系统路径上

node.js - 加入 Sequelize

javascript - 用另一个对象覆盖对象数组而不影响第一个对象的顺序

javascript - 如何在 ES6 中实现命名构造函数

javascript - 如何仅使用所需的键从另一个对象获取对象?

javascript - Google Maps API v3 点击事件未通过自定义叠加层传递

javascript - $http GET 未在 AngularJS 中显示

node.js - 如果express.js (node.js) http请求在完成之前关闭会发生什么?

javascript - 无法使用 nyc/istanbul 进行代码覆盖