如何在 Q .then() 回调中传播嵌套错误



我觉得这应该很容易,但我已经在上面挣扎了一段时间。

我有看起来像这样的代码(显然这是一个简化的示例)。

getPromise(param1, param2)
.then(function (results) {
    // do something that causes an error:
    var err1 = new Error()
    throw err1;
})
.then(function (results) {
    getAnotherPromise(param1)
    .then(function (res) {
        // do something else that might cause an error:
        var err2 = new Error()
        throw err2;
    })
})
.then(function (results) {
   // deal with the results of above code
})
.fail(function (error) {
   // handle error
})

问题是err2永远不会导致调用.fail处理程序。 err1按预期处理,但err2只是消失了。我尝试在负责生成err2.then之后添加另一个.fail处理程序,这些只是重新抛出err2,但这并没有改变任何东西。

如何编写一个同时处理err1err2的错误处理程序?

>除非你return,否则Q无法处理嵌套承诺。因此,您的代码应如下所示:

getPromise(param1, param2).then(function (results) {
  // do something that causes an error:
  throw new Error('error 1');
}).then(function (results) {
  return getAnotherPromise(param1).then(function (res) {
    // do something else that might cause an error:
    throw new Error('error 2');
  })
}).then(function (results) {
  // deal with the results of above code
}).fail(function (error) {
  // handle error
})

实际上,承诺值和错误一样被传播,因此您可以通过以下方式编写代码:

getPromise(param1, param2).then(function (results) {
  // do something that causes an error:
  throw new Error('error 1');
}).then(function (results) {
  return getAnotherPromise(param1)
}).then(function (res) {
  // do something else that might cause an error:
  throw new Error('error 2');
}).then(function (results) {
  // deal with the results of above code
}).fail(function (error) {
  // handle error
})

相关内容

  • 没有找到相关文章

最新更新