javascript - 如何解决 UnhandledPromiseRejectionWarning?
问题描述
我最近学习了 javascript,但我无法理解 Promise 的概念。这是一个片段,我希望会发生异常。
async function testRepository(): Promise<void> {
throw new Error('error');
};
async function testService(): Promise<void> {
try {
return await testRepository();
} catch (err) {
throw err;
}
};
async function testController(): Promise<void> {
try {
return await testService();
} catch (err) {
throw err;
}
}
(async () => {
try {
console.log(await testController());
} catch (err) {
throw err;
}
})();
运行 tat 代码时,我收到以下错误消息:
(node:16670) UnhandledPromiseRejectionWarning: Error: error
at /home/pellegrini/temp/webservices/test.js:42:19
at step (/home/pellegrini/temp/webservices/test.js:33:23)
at Object.next (/home/pellegrini/temp/webservices/test.js:14:53)
at /home/pellegrini/temp/webservices/test.js:8:71
at new Promise (<anonymous>)
at __awaiter (/home/pellegrini/temp/webservices/test.js:4:12)
at testRepository (/home/pellegrini/temp/webservices/test.js:40:12)
at /home/pellegrini/temp/webservices/test.js:54:42
at step (/home/pellegrini/temp/webservices/test.js:33:23)
at Object.next (/home/pellegrini/temp/webservices/test.js:14:53)
(node:16670) 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(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:16670) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
你能告诉我那个代码有什么问题并让它工作吗?通过工作,我的意思是如果我正确理解 Promise 的概念,就会产生一个错误。
解决方案
问题是您不断重新抛出错误,并且永远不会在任何地方处理它。所以它会不断冒泡,直到它产生一个 UnhandledPromiseRejectionWarning。
你只需要在某个时候通过处理错误来打破这个链条。例如:
async function testService(): Promise<void> {
try {
return await testRepository();
} catch (err) {
console.log('got an error');
//throw err; // Don't re-throw
}
};
推荐阅读
- selenium - 使用 selenium Python 滚动到无限加载页面的末尾
- postgresql - 如何将字典列表转换为字节流并将其加载到数据库
- python - map 在 python 中是如何工作的?
- reactjs - 成功登录后如何重定向到受保护的路由?
- docker - 如何退出码头工人?
- python - 如何从通过 Javascript 打开的页面获取 html?
- python - 如何让随机文本每隔几秒钟从列表中出现一次?
- flutter - 如何使用带有 PopupMenu 的消费者?
- tensorflow - Apache Ignite - 无与伦比的论据
- javascript - Nodejs Web 抓取与 Cheerio,以意想不到的方式获取文本