我正在实现一个异步函数来从 API 获取并显示 JSON 数据。
为了正确处理错误,我使用了 try/catch 块。
但是我收到了“未捕获(承诺)”错误 - 我不明白为什么。
这是我的代码:
const getData = async() => {
const url = "https://dummyjson.com/quotees?limit=20"; // it contains a typo (quotees) intentionally
try {
const res = await fetch(url);
return res.ok ? res.json() : Promise.reject(res.status);
} catch(err) {
console.log(err);
}
};
getData()
.then(d => {
if (d) d.quotes.forEach(q => ...);
});
console.log(err) 的输出是“Uncaught (in Promise) 404”。
为什么不是简单的“404”?
您返回一个被拒绝的承诺,该承诺未得到处理,从而在全局范围内引发错误。要使用您的
catch
块,只需抛出:
const getData = async() => {
const url = "https://dummyjson.com/quotees?limit=20"; // it contains a typo (quotees) intentionally
try {
const res = await fetch(url);
if(res.ok) return res.json();
throw res;
} catch(err) {
if(err instanceof Response){
console.log('response error:', err.status);
} else {
console.log('another error:', err);
}
}
};
getData();