首页 > 解决方案 > 发现 Nodejs Promise

问题描述

我想知道是否有一种方法可以轻松找出我正在使用哪些方法返回承诺。因为我使用了很多库并且不想筛选每个库以找出我是否可以 .then() 或 .catch() 或将我的方法放在 try-catch 块中。

我得到了现在众所周知的:

(节点:23423)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部或拒绝未使用 .catch() 处理的承诺。(拒绝编号:5)

每次发生此错误时,堆栈跟踪都不会指向我的文件中发生错误的行,这让我对我没有正确处理此错误的地方一无所知。为此,我将浏览所有脚本,但我想知道最有效的方法是什么。

标签: javascriptnode.jsnode-modules

解决方案


在这种情况下,Nodejs 会发出unhandledRejection 。

process.on('unhandledRejection', (reason, p) => {
  console.log('Unhandled Rejection at:', p);
  console.log('reason:', reason);
});

监听这个事件可以让你确定这个 Promise 是在哪里创建的,以及在哪个部分缺少一个await.then/ 。.catch

在编码时,您需要始终确定 API/库是否使用 Promises、回调(如果它是同步的或基于事件的)。每个库都应该对此保持一致,或者至少通过函数的命名来明确。如果图书馆对此不清楚,您应该考虑不使用它。

没有自动的方法来确定缺少thentrycatch 块的位置。最小化问题的一种方法是创建单元测试并在您的项目中达到 100% 的代码覆盖率。


推荐阅读