函数返回 Promise,检查错误

2023-12-07

我有一个函数doSomething()利用 Q 框架返回一个承诺链。内容类似于:

loadDataSet : function (params) {

    return Q.fcall(function() {
        //Do Something
    })
    .then(function(){
       //Do Something Else
       throw New Error('unexpected error');
    });
}

调用代码类似于:

var promise = loadDataSet(args);

我想弄清楚是否引发了该错误。请注意,在loadDataSet函数实现,我没有使用.done()功能。

到目前为止,我的代码看起来像这样,但未能成功捕获错误并对其进行适当处理(此处,代码已稍作修改,与上面略有不同):

try {
    loadDataSet(args)
    .catch(function(error) {
       return error
    })
    .done();
}....

目标是处理来自 try-catch 块的错误。我缺少什么?


好吧,这将是一件很糟糕的事情。

你不能

虽然许多 Promise 库允许您执行此操作并为您报告未处理的拒绝 - 在 Q 中您没有方法自动检测这些失败。

你必须Use .done或更改承诺库。哎呀,即使是原生承诺几天后就能做到这一点.

问具体解决方案:

在 Q 中,你唯一现实的选择是使用.done,不像thendid 不是抛出安全的,你可以从那里抛出异常,并且它们不会被抑制 - 这要求你记住始终终止链done但它有效:

myObj.loadDataSet(handleSuccess, handleError).done(); // will throw on rejection

就我个人而言,在 Q 解决这个问题和其他问题之前,我不建议任何人使用它。

现代图书馆和原生承诺

我写了一个规格基于 Domenic 和 Petka 的工作,承诺库能够全局报告错误并挂钩它们。一些库已经实现了这一点,包括bluebird 和when。 Domenic 正在研究 Web 浏览器的并行规范。

目前支持或将在未来几周内支持的有:bluebird、when、es6-promise、rsvp 和 io 中的本机 Promise。

// log any unhandled promise rejections
process.on('unhandledRejection', function(reason, p){
    console.log("Possibly Unhandled Rejection at: Promise ", p, " reason: ", reason);
    // application specific logging here
});

至于浏览器,比如:

window.addEventListener("unhandledrejection", function(e) {
    var reason = e.detail.reason;
    var promise = e.detail.promise;
    console.log("Unhandled rejection", promise, reason);
});

该协议支持较少,但有计划将其包含在本机承诺中。目前,Firefox 原生承诺将报告未处理的拒绝,Chrome 也会尝试 - 但还没有浏览器挂钩(不过它即将推出)。

请注意,团队正在开发非常有趣的工具。在与 Paul Irish 讨论之后,我相信在浏览器中调试 Promise 的工具方面将会有伟大的事情发生,这将使本机 Promise 几乎像 Bluebird Promise 一样可调试(这太棒了!)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数返回 Promise,检查错误 的相关文章

  • jQuery mobile 中的文本区域高度和宽度?

    我修复了 jQuery mobile 中文本区域元素的高度 并且在纵向中得到了完美的高度和宽度 但在横向中宽度没有放大 谁能帮我 提前致谢 HTML
  • 如何阻止直接访问我的 JavaScript 文件?

    我使用 Minify 来缩小并缓存所有脚本请求 我只希望我的用户能够访问 JavaScript 文件的缩小版本 缩小位于www example com min我的脚本位于www example com scripts 如何阻止直接访问doc
  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • Firebase,只得到新的孩子[重复]

    这个问题在这里已经有答案了 var firebase new Firebase firebaseRef on child added function snapshot 这将接收所有元素 有没有办法在创建新的 Firebase 引用时不接收
  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • 如何使用 Greasemonkey 监视静态 HTML 页面的更改?使用哈希?

    我希望我的 Greasemonkey 脚本仅在其访问的静态页面具有与以前完全相同的内容时运行 现在我可以设置一个包含该页面哈希的变量 我正在寻找一种动态散列页面的方法 以便我可以将我的散列与生成的散列进行比较 关于如何即时实现散列的任何想法
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • 如何使用角度材料在具有可扩展行的表格中创建嵌套垫表

    我有以下数据 id c9d5ab1a subdomain wing domain aircraft part id c9d5ab1a info mimetype application json info dependent parent
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • JavaScript eval("{}") 返回行为?

    根据ECMA 262 规范 http www ecma international org publications files ECMA ST Ecma 262 pdf 以下语句返回1 eval 1 eval 1 eval 1 var a
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • 如何在 Java 应用程序中添加文件浏览器?

    我是 Java 编程新手 正在构建一个应用程序 该应用程序将添加 显示和删除给定文件夹位置中的文件 我已经使用 JFileChooser 添加了文件 并且知道如何删除这些文件 然而我被显示部分困住了 我想在我的应用程序中使用不同的图标显示文
  • 在 Fortran 90 中使用模块内部的子例程

    我有一个关于在 Fortran 90 中的模块内使用子例程的问题 这是我的代码 Module Multiplication Subroutine Two times input output Real input output output
  • Castle.Windsor 和 HttpContextWrapper

    HttpContextWrapper 和 HttpContextBase 如在这里解释 被引入是为了使 HttpContext 更加可模拟 可测试 我正在尝试使用它S arp 架构 并遇到一些问题 我的 MVC 控制器设置为在构造函数中接受
  • Python:Matplotlib - 多个数据集的概率图

    我有几个数据集 分布 如下 set1 1 2 3 4 5 set2 3 4 5 6 7 set3 1 3 4 5 8 如何使用上面的数据集绘制散点图 其中 y 轴是概率 即集合中分布的百分位数 0 100 x 轴是数据集名称 在 JMP 中
  • libstdc++ 是可重入库吗?

    我在 MAC 上使用 libstdc 来开发 Firefox 的扩展 当我在多个 Firefox 扩展中引用 libstdc 库时 我在 libstdc 库中遇到崩溃 我在想XCode编译器的libstdc 是否可重入 如果没有 是否有任何
  • 在Python命令行上定义函数时出现语法错误

    我正在尝试在 Python REPL 上定义一个函数 每次我尝试运行下面的代码时 都会收到语法错误 Code def hello print Hello hello Error C Users Desktop gt python Pytho
  • SSIS - 脚本任务:使用带有动态文件路径的 VBscript 替换文本文件中的 TEXT

    我正在使用 SSIS 脚本任务来替换文本文件中的文本 在我的 VB 脚本中 脚本中硬编码了文件路径 但我想改用用户变量 Const ForReading 1 Const ForWriting 2 Dim objFSO objFile str
  • 在 CMD 中检测可移动驱动器盘符

    我正在尝试编写一个脚本 它将检测我的 USB 可移动驱动器的字母 UUI 然后在其上创建文件夹 我为 CMD 编写了一些命令 这些命令单独运行时可以工作 然而 当我将它们放入bat文件中时 我总是会遇到一些错误 下面是bat文件中的命令 f
  • 从流图像创建视频 C#

    如何在 C 中从流图像 只有图像 没有声音 构建视频 这是我的应用程序的一些代码 static int ii 1 public void drawBitmap byte data MemoryStream ms new MemoryStre
  • 当浏览器不支持媒体查询时到底会发生什么?

    我正在使用媒体查询构建我的网站以适应不同的屏幕尺寸 巧合的是 我在一台旧电脑上用未更新的浏览器检查了我的网站 发现我得到的是移动内容和桌面内容的混合体 但是我没有办法查看代码 因为没有安装萤火虫或类似的东西 我的问题是如果浏览器不接受 cs
  • 在正则表达式字符括号中包含连字符?

    validator addMethod AZ09 function value return a zA Z0 9 test value Only letters numbers and are allowed 当我使用类似的东西时test
  • 条件中额外的括号有意义吗?

    我正在使用一些较旧的 JavaScript 代码 并偶然发现在如下情况下广泛使用额外的括号 if foo if bar if lorem ipsum if functionCall1 functionCall2 这种做法有意义吗 我是否不知
  • 在画布单词搜索游戏中创建线条

    I created word search game in canvas Now I want when user select character for determine word draw line for highlight th
  • 使用 WM_SETFOCUS 和 WM_KILLFOCUS

    在 Delphi 中 我有两个编辑框和一个按钮 默认选择 Edit1 我想使用消息来改变焦点 但如果我按照下面的方法做 那么这一切都会因为两个编辑中的选择范围 插入符号在错误的框中等而变得混乱 我使用消息的原因是这样我可以控制外部应用程序中
  • Spring 事务和 hibernate.current_session_context_class

    我有一个使用 Hibernate 4 和 Spring Transactions 的 Spring 3 2 应用程序 所有方法都运行良好 我可以正确访问数据库以保存或检索实体 然后 我引入了一些多线程 由于每个线程都访问数据库 我从 Hib
  • 尝试加载“Oracle”dbDriver 时出现 ORA-01804 错误

    我在用着ROracle并在 R 中执行以下命令 Sys getenv drv lt dbDriver Oracle 这是我在最后一行之后得到的错误 Error in oci Driver oci drv interruptible inte
  • python 正则表达式转义字符

    We have gt gt gt str exit r ndrwxr xr x 2 root root 0 Jan 1 2000 x1b 1 34mbin x1b 0m r ndrwxr xr x 3 root root 0 Jan 1 2
  • 重塑/收集功能可创建用于多级分析的数据集

    我有一个很大的数据集 其中 240 个病例代表 240 名患者 他们都接受了神经心理学测试并填写了调查问卷 此外 他们的重要其他人 以下简称 代理人 也填写了调查问卷 由于 患者 和 代理 嵌套在 夫妇 中 因此我想在 R 中进行多级分析
  • 我可以使用 Squid 升级客户端 TLS 连接吗?

    我正在尝试允许旧系统 CentOS 5 x 继续与服务建立连接 这些服务很快将仅允许 TLS v1 1 或 TLS v1 2 连接 Salesforce 各种支付网关等 我已经在 Centos 7 服务器上的 docker 容器中安装了 S
  • 函数返回 Promise,检查错误

    我有一个函数doSomething 利用 Q 框架返回一个承诺链 内容类似于 loadDataSet function params return Q fcall function Do Something then function Do