发现 Nodejs 承诺

Discovering Nodejs promises

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

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

(node:23423) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block or by rejecting a promise which was not handled with .catch(). (rejection id: 5)

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

Nodejs 在这种情况下发出 unhandledRejection

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

侦听此事件可让您确定此 Promise 的创建位置以及缺少 await.then/.catch 的部分。

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

没有自动的方法来找出 thentry catch 块丢失的位置。将问题最小化的一种方法是创建单元测试并在项目中达到 100% 的代码覆盖率。

一般来说,这件事没有解决方案 - 您需要了解您自己的代码正在调用哪些函数并加以处理。与处理异常相同。

你可能会通过 unhandledRejection 方法了解是什么代码导致了问题,但你永远不会 100% 确定它。