使用 Bluebird Promises 处理异步异常
使用异步例程时,异常处理可能很难管理。 Promises 是 Bluebird.js 的一项关键功能,它提供了一种处理异步异常的结构化方法。
挑战
在您的代码示例中,setTimeout 用于非承诺回调。当此回调中抛出错误时,Bluebird 的 catch 不会被触发,从而导致程序崩溃。
Bluebird 的 Promise 结构
Promises 拦截回调中抛出的异常函数(then/catch/Promise 构造函数)。要处理异步回调的异常,将它们包装在 Promise 中至关重要。
优雅的异常处理
在您的场景中,您可以将 setTimeout 回调包含在 Promise 中。然后 catch 块将捕获错误:
<code class="javascript">function getPromise() { return new Promise(function(resolve, reject) { setTimeout(resolve, 500); }).then(function() { console.log("hihihihi"); throw new Error("Oh no!"); }); }</code>
拒绝是关键
永远不要在非 Promise 回调中直接抛出错误。相反,拒绝周围的承诺。如有必要,请使用 try-catch 来确保正确处理。
<code class="javascript">function getPromise() { return new Promise(function(resolve, reject) { try { setTimeout(resolve, 500); } catch (err) { reject(err); } }); }</code>
通过遵守这些原则,您可以确保在 Node.js 和浏览器中进行优雅的异常处理,即使对于流氓异步回调也是如此。
以上是如何使用 Bluebird Promise 处理异步异常?的详细内容。更多信息请关注PHP中文网其他相关文章!