【发布时间】:2019-07-09 00:43:56
【问题描述】:
我正在使用一个封装了他们的 API 的第 3 方模块。我有以下代码:
const api = require('3rdpartyapi');
async function callAPI(params) {
try {
let result = await api.call(params);
return result;
}
catch(err) {
throw err; //will handle in other function
}
}
async function doSomething() {
try {
//...do stuff
let result = await callAPI({a:2,b:7});
console.log(result);
}
catch(err) {
console.error('oh no!', err);
}
}
尽管有两个try-catch 块,但第 3 方 API 在失去与 homebase 的连接时(经常发生:(),爆炸:
(node:13128) UnhandledPromiseRejectionWarning: FetchError: request to https://www.example.com failed, reason: getaddrinfo ENOTFOUND
接着是:
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: 1)
我的try-catch 怎么都没人听懂这个?究竟什么是未处理的,以及如何实际处理?
【问题讨论】:
-
如果你确定你正在处理你在另一个函数中抛出的错误,那么,在第 3 方 api 中是否存在一些未处理的承诺拒绝?你能跟踪 api.call() 函数,看看你是否发现任何未处理的承诺?
-
@BryanOliveira 不,我没有代码 - 但问题仍然存在:如何在不同的函数中处理它?我的一个 catch 块不应该抓住它吗?
标签: javascript node.js promise async-await