Javascript Promise 链接多个错误

标签 javascript chaining

为什么我所有已解析的回调都正确执行,但仅 1 错误回调正在运行?

在此处的示例中,如果 longOperation(true) 我只收到一个错误,而当使用 false 运行时,我收到两条已解决的消息。据我了解,每个 .then 返回一个新的 Promise,该 Promise 处于第二个 .then 错误回调注册的错误状态

此示例是使用 Typescript 编写的!

function longOperation(error) {
  return new Promise < any > ((resolve, reject) => {
    if (error) {
      reject("Error")
    } else {
      setTimeout(function() {
        resolve(true)
      }, 1000)
    }

  })
}

let op = longOperation(true);

op
  .then(result => {
    console.log("Resolved #1")
  }, undefined)
  .then(result => {
    console.log("Resolved #2")
  }, undefined)
  .then(undefined, error => {
    console.log("Error1")
  })
  .then(undefined, error => {
    console.log("Error2")
  })

最佳答案

第一个错误处理程序捕获错误,就像常规的 catch block 一样。如果您希望链接的 Promise 被拒绝,则必须重新抛出错误:

Promise.reject().then(() => {
  console.log(1);
}).then(() => {
  console.log(2);
}).then(null, e => {
  console.log(3);
  throw e; // <= rethrow here
}).then(null, e => {
  console.log(4);
});

关于Javascript Promise 链接多个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42054698/

相关文章:

javascript - javascript 中的链接问题

javascript - 如何制作链接方法但同时返回超过 3 个值

javascript - 用于电子邮件验证的 UI 对话框不显示任何对话框

javascript - 动态添加文本区域到容器extjs

javascript - 双向连续套接字通信

javascript - 没有 Internet 检测 jQuery 不工作

javascript - 如何使用 array.filter() 方法过滤 JavaScript 数组?

javascript - 有没有办法在 Jquery 链式语句中添加 x 元素作为新创建元素的子元素?

c++ - 在 C++ 中将值作为类的成员传递给 vector

ruby-on-rails - 尝试为 Rspec 3 中的模型 stub 链接方法