【发布时间】:2021-04-18 18:42:02
【问题描述】:
我有以下代码:
const getJSON = async function(url, errorMsg = 'Something went wrong') {
return fetch(url).then(response => {
if (!response.ok) throw new Error(`${errorMsg} (${response.status})`);
return response.json();
});
};
const outerFunc = async function() {
try {
let x = await getJSON();
} catch (err) {
console.log(err);
}
}
outerFunc();
我尝试在控制台中运行代码并得到一个错误:
VM60:2 Fetch API 无法加载 chrome://new-tab-page/undefined。不支持 URL 方案“chrome”。
我想了解 **outerFunc ** 函数周围的 try/catch 块是否可以捕获来自被调用的异步函数(asyncFunction ) ,或者 asyncFunction 应该自己处理它的错误。我知道在 Java 中可以“传播”错误。 JS 中的正确行为是什么?
【问题讨论】:
-
这里
getJSON是async没有意义,它已经返回了一个承诺并且不包含await(尽管您可以将其重构为使用await)。outerFunc将捕获来自getJSON的promise 链中 的错误,即拒绝。 -
@jonrsharpe,我明白了。谢谢
标签: javascript asynchronous error-handling async-await