”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用 Bluebird Promise 处理异步回调中未处理的异常?

如何使用 Bluebird Promise 处理异步回调中未处理的异常?

发布于2024-11-21
浏览:294

How do you handle unhandled exceptions in asynchronous callbacks with Bluebird promises?

使用 Bluebird Promises 进行异步异常处理

问:如何使用 Bluebird Promises 处理异步回调中未处理的异常?

Bluebird Promise 本质上不会捕获异步回调抛出的异常,这与domains.

A:使用 Promise 构造函数或 then() 闭包处理异常

要捕获异步回调中的异常,请将回调包装在 Promise 构造函数或 then( ) 闭包:

function getPromise(){
    return new Promise(function(done, reject){
        setTimeout(function(){
            throw new Error("AJAJAJA");
        }, 500);
    }).then(function() {
        console.log("hihihihi");
        throw new Error("Oh no!");
    });
}

避免在自定义异步回调中抛出异常

永远不要在自定义异步回调中直接抛出异常(在 Promise 回调之外)。相反,拒绝周围的承诺:

function getPromise(){
    return new Promise(function(done, reject){
        setTimeout(done, 500);
    }).then(function() {
        console.log("hihihihi");
        reject(new Error("Oh no!"));
    });
}

示例

使用 Promise 构造函数:

var p = getPromise();
    p.then(function(){
        console.log("Yay");
    }).error(function(e){
        console.log("Rejected",e);
    }).catch(Error, function(e){
        console.log("Error",e);
    }).catch(function(e){
        console.log("Unknown", e);
    });

输出:

Error [Error: Oh no!]

此方法可确保捕获并正确处理异常,防止应用程序崩溃。

最新教程 更多>
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-04-15
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-04-15
  • 精通MobX:React简化与响应式状态管理
    精通MobX:React简化与响应式状态管理
    [2 MOBX是用于JavaScript应用程序的流行状态管理库,尤其是在React中。与Redux依赖于集中式商店和明确的行动派遣不同,MOBX采取了一种更具反应性的方法来管理状态。它通过跟踪依赖项并在状态更改时仅重新渲染应用程序的必要部分来自动更新您的应用程序的状态和UI。 ...
    编程 发布于2025-04-15
  • FastAPI自定义404页面创建指南
    FastAPI自定义404页面创建指南
    response = await call_next(request) if response.status_code == 404: return RedirectResponse("https://fastapi.tiangolo.com") else: ...
    编程 发布于2025-04-15
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-04-15
  • 自定义头为何出现在AJAX请求的Access-Control-Request-Headers中?
    自定义头为何出现在AJAX请求的Access-Control-Request-Headers中?
    理解访问控制请求请求标题在使用jquery通过ajax进行HTTP请求时,处理访问权限的访问控制问题对于交叉 - 轨道请求的处理至关重要。其中一个方面是将自定义标头添加到请求中。有趣的是,在使用Firebug检查请求后,似乎将自定义标题放入访问控制的标题中,而不是其各自标题中的预期值。 $。aj...
    编程 发布于2025-04-15
  • 如何高效调试CSS `calc()`值?
    如何高效调试CSS `calc()`值?
    CCSS calc()值deble debugging 确保您的公式遵守以下规则:White space is required on both sides of and - operators.How to Debug Calculated Value:You cannot direct...
    编程 发布于2025-04-15
  • 为什么尽管有效代码,为什么在PHP中捕获输入?
    为什么尽管有效代码,为什么在PHP中捕获输入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,输出...
    编程 发布于2025-04-15
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-04-15
  • Java中应避免使用`synchronized(this)`吗?
    Java中应避免使用`synchronized(this)`吗?
    应该避免Java中的同步(此)? 当锁定是一个潜在的关注时,由于意外访问锁定是无意识的。使用同步(此)时,锁成为班级暴露接口的一部分,应相应地记录。在某些情况下,其他代码可能有意访问锁定,例如使用Collections.synchronizedMap。 何时使用同步(this) ,尽管关...
    编程 发布于2025-04-15
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-04-15
  • C++初始化字段的最佳方式:初始化列表 vs 构造函数体
    C++初始化字段的最佳方式:初始化列表 vs 构造函数体
    在构造函数中初始化字段:初始化器列表和构造函数主体之间的差异在C中,构造函数在对象创建过程中提供了一种方便的方法来初始化实例字段。构造函数中的字段初始化有两种主要方法:初始化器列表和构造函数主体。 thing(int _foo,int _bar):成员1(_foo)(_foo),成员2(_bar)...
    编程 发布于2025-04-15
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, attributeError:SomeClass实...
    编程 发布于2025-04-15
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-04-15
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-15

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3