承诺会捕获太多错误吗?

时间:2014-10-22 02:01:30

标签: javascript node.js error-handling promise

我在doc中遵循这种风格写下承诺:
Q.fcall(promisedStep1) .then(promisedStep2) .then(promisedStep3) .then(promisedStep4) .then(function (value4) { // Do something with value4 }) .catch(function (error) { // Handle any error from all above steps }) .done();

catch子句会捕获包括拼写错误在内的任何错误。 但是,根据nodejs dos:

  

由于throw如何在JavaScript中运行,因此几乎从来没有任何方法可以安全地从中断的位置继续运行,而不会泄漏引用,或创建其他类型的未定义的脆弱状态。响应抛出错误的最安全方法是关闭进程。

如果我们在回调样式中编写代码,但在promise样式中没有编写代码,则会抛出某些错误 这真让我困惑。在承诺写作时,我应该如何避免泄露参考文献。

感谢〜

1 个答案:

答案 0 :(得分:1)

该示例显示了良好的承诺链,包括使用.done()来确保从promise链中向外部应用程序抛出任何未处理的异常。 就引用和错误处理而言:promise链仅保证将错误转发到.catch回调。如果在抛出错误时无法清理状态 - 你运气不好。例如



Q.fncall(function firstStep() {
  var fs = open file reference
  foo.bar; // generates ReferenceError
}).then(function somethingElse() {
  ...
}).catch(function (err) {
  // we have caught ReferenceError
  // but we cannot clean up open fs reference!
}).done();




我们发现了错误,但是catch处理程序无法关闭fs引用。这就意味着即使有了承诺,我们也必须考虑如何在发生错误的情况下清理资源。