处理异步场景时,防止节点因恶意回调而崩溃至关重要。在本文中,我们将探讨使用 Bluebird Promise 来应对这一挑战的最佳实践。
考虑以下场景:
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { throw new Error("AJAJAJA"); }, 500); }); } ...
通过在 setTimeout 内抛出异常,我们绕过了 Bluebird 的错误处理机制并使程序崩溃。但是,如果异常发生在 setTimeout 之前,Bluebird 会成功捕获它:
function getPromise() { return new Promise((done, reject) => { throw new Error("Oh no!"); setTimeout(() => { console.log("hihihihi"); }, 500); }); } ...
这表明 Promises 不会拦截来自异步回调的异常。相反,它们仅在构造函数回调或 then/catch 回调中处理错误。
为了避免节点崩溃,切勿在自定义异步回调中抛出错误。相反,拒绝周围的承诺。考虑以下修改:
function getPromise() { return new Promise((done, reject) => { setTimeout(() => { done(); }, 500); }).then(() => { console.log("hihihihi"); throw new Error("Oh no!"); }); } ...
通过使用 then 包装异步操作,我们现在可以在 Bluebird 回调中处理错误。
以上是Bluebird Promises 如何解决 Node.js 中异步异常处理的挑战?的详细内容。更多信息请关注PHP中文网其他相关文章!