发现 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、回调(如果它是同步的或基于事件的)。每个库都应该在这一点上保持一致,或者至少通过函数的命名来明确。如果图书馆不清楚,你应该考虑不要使用它。
没有自动的方法来找出 then
或 try
catch 块丢失的位置。将问题最小化的一种方法是创建单元测试并在项目中达到 100% 的代码覆盖率。
一般来说,这件事没有解决方案 - 您需要了解您自己的代码正在调用哪些函数并加以处理。与处理异常相同。
你可能会通过 unhandledRejection
方法了解是什么代码导致了问题,但你永远不会 100% 确定它。
我想知道是否有一种方法可以轻松找出我正在使用哪些方法 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、回调(如果它是同步的或基于事件的)。每个库都应该在这一点上保持一致,或者至少通过函数的命名来明确。如果图书馆不清楚,你应该考虑不要使用它。
没有自动的方法来找出 then
或 try
catch 块丢失的位置。将问题最小化的一种方法是创建单元测试并在项目中达到 100% 的代码覆盖率。
一般来说,这件事没有解决方案 - 您需要了解您自己的代码正在调用哪些函数并加以处理。与处理异常相同。
你可能会通过 unhandledRejection
方法了解是什么代码导致了问题,但你永远不会 100% 确定它。