如何确定 Node.js 中导致 UnhandledPromiseRejectionWarning 的原因?

2024-01-06

我已经围绕 async/await 库构建了我的 Node.js 应用程序,并且它在大多数情况下都运行良好。我遇到的唯一麻烦是,每当未履行承诺时,我都会收到以下错误的一些变体:

(node:83333) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property '_id' of null

我通常能够找到有问题的承诺,但有时需要进行大量调试。有没有一种方法可以用来检查未处理的承诺的行号?会让我省去相当大的头痛。


我建议你设置一个全局的unhandledRejection handler https://nodejs.org/api/process.html#process_event_unhandledrejection在条目文件的最开头:

process.on('unhandledRejection', (reason, p) => { throw reason });

这样,即使您忘记在本地捕获错误,您仍然可以轻松地追踪它们。

Update

对于上述处理程序如何帮助您似乎有些困惑。基本上,当您没有捕获承诺错误时,节点会将该警告输出到控制台。无论出于什么愚蠢的原因,节点只输出错误消息而不输出堆栈。设置处理程序然后重新抛出错误会生成堆栈,并允许您更轻松地调试代码。这是一个例子:

let test = () => new Promise((resolve, reject) => {
    throw new Error('Random Error'); // same as "reject(new Error('Random Error'));"
});

test();

如果没有处理程序,您将得到:

(node:20012) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Random Error

然后,我们在文件顶部添加处理程序:

process.on('unhandledRejection', (reason, p) => { throw reason });

let test = () => new Promise((resolve, reject) => {
    throw new Error('Random Error'); // same as "reject(new Error('Random Error'));"
});

test();

现在我们得到了一个更好的错误堆栈:

(function (exports, require, module, __filename, __dirname) { process.on('unhandledRejection', (reason, p) => { throw reason });
                                                                                                                ^

Error: Random Error
    at Promise (S:\amir\test.js:5:9)
    at test (S:\amir\test.js:3:18)
    at Object.<anonymous> (S:\amir\test.js:8:1)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:394:7)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定 Node.js 中导致 UnhandledPromiseRejectionWarning 的原因? 的相关文章

  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud
  • 错误关系不存在

    我得到了 error relation causes does not exist 我的节点应用程序出现错误 这种关系确实存在 我不确定问题出在哪里 我创建了该表 CREATE TABLE causes cause id bigint NO
  • 如何阻止 Node.js 服务器崩溃

    我是节点js新手 我试图创建一个简单的 HTTP 服务器 我按照著名的例子创建了一个 Hello World 服务器如下 var handleRequest function req res res writeHead 200 res1 e
  • 什么是 Microsoft.Bcl.Async?

    什么是 Microsoft Bcl Async 它的用途是什么 我已经读过包装页面 https www nuget org packages Microsoft Bcl Async that 此包使 Visual Studio 2012 项
  • Express中间件修改请求

    我目前有一个正在运行的服务器 前端使用nodejs mongo express 和 W2UI W2ui 请求来自包含所有参数的记录数组 记录 名称 foo 我想编写一个中间件 在请求到达路由之前对其进行编辑和更改 您可以创建自己的中间件来处
  • 在ubuntu 12.04上安装nodejs和npm后找不到.npmrc文件

    我刚刚按照教程在我的 ubuntu 12 04 上安装了 nodejs 和 npm https gist github com dwayne 2983873 https gist github com dwayne 2983873 现在安装
  • API 使用令牌向 odoo 进行身份验证

    我想使用令牌从 Express 应用程序向 Odoo 进行身份验证 我在用odoo xmlrpc https www npmjs com package odoo xmlrpc连接 Odoo 的节点模块 我的快递应用程序 Odoo 要求 A
  • Nodejs 中的子域

    如何处理nodejs的子域请求 例如以下代码回显test在控制台中的任何请求http localhost 9876 任何内容 http localhost 9876 5Banything 5D var http require http h
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • 为什么 Node.js 应用程序只能从 127.0.0.1/localhost 访问?

    我本来打算教我的朋友介绍 Node 但是后来 我想知道为什么这个代码来自nodejs org var http require http http createServer function req res res writeHead 20
  • 对于实时网站使用 Node.js 或 Ringojs 安全吗?

    正如标题中所述 我想知道使用实际的 omg 平台 即 Node js 和 Ringo js 的实际版本 之一来开发网站是否安全 另外 我想知道他们是否支持cookie sessions以及他们如何处理多字段帖子 PHP中的fieldname
  • 在某些情况下省略“等待”是否合法?

    我在用async await在我的代码中的几个地方 例如 如果我有这个功能 async function func x return y 然后我总是这样称呼它 async function func2 x let y await func
  • Chrome/Firefox 在后台发送两个 POST,间隔恰好 5 秒,仅调用一次来获取 Nodejs 8.0.0 服务器

    注意 这不是飞行前选项 也不是网站图标或其他类似内容 实际上是 2 个帖子 下面有一个屏幕截图可以更清楚地显示这一点 我的规格 版本 macOS 塞拉利昂版本 10 12 3 Chrome 版本 61 0 3128 0 官方版本 开发版 6
  • 如何在Electron WebView中连接到代理?

    因为我可以通过连接到免费代理服务器 或付费 目前用作电子 JS 解决方案作为桌面应用程序 代理列表服务器示例 http proxylist hidemyass com http proxylist hidemyass com 您可以使用 s
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • 异步WCF调用来保存线程?

    In 另一个问题 https stackoverflow com q 19731600 279516 建议我发送异步网络请求 而不是在后台线程上发送同步请求 原因是为了不浪费一根线 我试图理解这是怎么回事 这是最初的做法 我可以理解这里怎么
  • 如何在 Sequelize ORM 中限制连接行(多对多关联)?

    Sequelize 定义了两种模型 具有多对多关联的 Post 和 Tag Post belongsToMany db Tag through post tag foreignKey post id timestamps false Tag
  • Sequelize - 使用 es6 和模块运行迁移

    我不确定我是否做错了什么或者什么 我觉得我正在运行一个现代的 相当常见的堆栈 但我无法让新的 Sequelize v6 与我的设置完美配合 我在 Node v14 17 Sequelize v6 6 2 上 在我的 package json
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • JavaScript Promise 不执行 .then()

    我在 JavaScript 中的 Promise 方面遇到了一些问题 我想做的是获得一个地址列表 然后对于每个地址 我需要调用地理编码 API 来获取 lat lng 然后我将继续将标记与热图一起绘制 这是我的代码 let promiseK

随机推荐

  • 将条件面板与 checkboxGroupInput 中的值结合使用

    我想使用 checkboxGroupInput 然后 如果选中某个框 我想要一个条件面板 一个玩具示例在这里 shinyUI fluidPage sidebarLayout sidebarPanel checkboxGroupInput i
  • 互信息,Kullback Leibler 两个彩色图像之间的散度

    我正在研究一个使用互信息进行图像分类的项目 它要求我使用彩色图像的概率分布 要么我想计算Matlab中的互信息或Kullback Leibler散度 谁能帮我解决这个问题吗 我将彩色图像的熵计算为 I imread s1 png rgb c
  • 如何在hive中使用order by和collect_set()操作

    在表 1 中 我有 customer id item id 和 item rank 根据某些销售额的项目排名 我想收集每个 customer id 的项目列表 并根据 item rank 排列它们 Customer id item id r
  • 如何将输入类型日期的默认值设置为今天?

    给定一个输入元素
  • Cypress 装置 - 无法读取未定义的属性(读取“数据”)

    我正在尝试使用固定装置来保存不同测试的数据 特别是用户凭据 这是代码的示例 当进行第二次测试时 我得到了 Cannot read properties of undefined reading data 有什么想法以及如何解决这个问题吗 这
  • PHP 删除点和连字符

    您好 我需要从变量时间和日期中删除点和连字符 这是我的代码 todaydate date Y m d n time utc mktime date G date i date s NowisTime date G i s time utc
  • Supervisorctl 不使用 Sqs 我得到了错误

    安装并配置后supervisor我有一些工作正在排队LaravelWeb应用程序 我的服务器操作系统是centOs运行后supervisor我收到这个错误 Symfony Component Debug Exception FatalThr
  • 不区分大小写 preg_replace_callback

    在下面的函数中 我想匹配关键字不区分大小写 应匹配 蓝色瑜伽垫 和 蓝色瑜伽垫 但是 目前仅当关键字大小写相同时才匹配 mykeyword 蓝色瑜伽垫 post gt post content preg replace callback b
  • 释放模式下不显示菜单

    我希望我为测试条目创建的菜单应该处于调试模式 但是当我发布 启动 我的应用程序时 不应为测试条目显示菜单 有人可以帮助我吗 检查IS DEBUG MODE在您的应用程序中标记并在其中添加代码 Use PackageManager得到一个Ap
  • 如何去掉不必要的括号?

    Same as this https stackoverflow com questions 10999835 regular expression to remove multiple parenthesis但是JavaScript 几个
  • 将外部 JavaScript(来自 CDN)捆绑到 React 组件中

    有哪些选项可以将外部 javascript sdk 捆绑到 React 组件中 我尝试在index html中包含javascript并通过window xyz引用它 它运行良好 但我无法进行生产构建 因为 javascript 不是以这种
  • C# 中的 JSON-RPC 客户端示例代码

    我需要一个简单的 C JSON RPC 1 0 客户端 最好使用 NET 2 0 或更高版本 我查看了 JRock 0 9 他们有几个示例 包括 Yahoo reader 但示例演示的是 JSON 而不是 JSON RPC 我知道我可以使用
  • 如何从 SQL 转换为 NoSQL/MapReduce?

    我有使用关系数据库的背景 但最近开始涉足 CouchDB 并对一些非关系操作 在 SQL 中很简单 在 CouchDB 中并不是一流函数感到惊讶 如果您花点时间将下面的每个 SQL 语句映射到其 MapReduce 等效项 我将不胜感激 S
  • x86 汇编等式 vs =

    我正在上一门 x86 汇编语言课程 它的进展速度相当快 本书一直在做一件事 但没有提及它是如何工作的 那就是在定义数据时使用 equ 和 运算符 所以看起来 equ 是用来定义常量的 但是 是一样的吗 如果我有一些代码 data count
  • 文件下载器中的基本访问身份验证问题

    我在从互联网下载应用程序中的二进制文件 zip 文件 时遇到问题 我必须使用基本访问身份验证来授权对文件的访问 但服务器响应始终是 HTTP 1 0 400 Bad request String authentication this lo
  • 如何调试 Node.js 服务器?调试器跳过我的断点! (使用VSCode)

    我正在尝试使用自定义服务器调试 Next js 应用程序 该服务器通常使用dev执行的 Yarn 脚本node server js VSCode 包含 Node js 调试扩展和本指南 https code visualstudio com
  • Chart.js 在画布上单击时获取最近的点

    单击画布上的任意位置时有没有办法获得最近的点 也许以某种方式收获核心 最近 方法 谢谢 我想你会发现getElementsAtXAxis很有帮助 基本上 getElementsAtXAxis有一个非常相似的行为getElementsAtEv
  • html 表单 - 摆脱问号和方程式

    这是我的代码 if request path employees
  • C# xml 文档

    目的是什么 xml随组件一起提供的文档文件 dll files 我知道如何构建一个 例如这里 http msdn microsoft com en us library aa288481 28VS 9 0 29 aspx 但是它们有什么用呢
  • 如何确定 Node.js 中导致 UnhandledPromiseRejectionWarning 的原因?

    我已经围绕 async await 库构建了我的 Node js 应用程序 并且它在大多数情况下都运行良好 我遇到的唯一麻烦是 每当未履行承诺时 我都会收到以下错误的一些变体 node 83333 UnhandledPromiseRejec