【发布时间】:2014-12-17 10:02:32
【问题描述】:
我在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时如何避免泄露引用。
谢谢~
【问题讨论】:
-
如果您有需要清理的打开文件句柄之类的东西,那么您必须在打开文件句柄范围内的某处有一个
.catch(),以便在出现异常时清理它们抛出。这只是你作为程序员的责任。在 nodejs 中,文件句柄不会自行清理。与套接字等其他一些资源相同。 -
在链中的每个范围内,您都必须问自己一个问题——如果这里抛出异常,是否需要清理一些东西。如果答案是肯定的,那么您必须在那里捕获异常。清理后可以重新抛出异常。
标签: javascript node.js error-handling promise