为什么异步函数中返回的 Promise.reject 没有被该函数内的 try-catch 块捕获?

问题描述 投票:0回答:1

我正在实现一个异步函数来从 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”?

javascript promise
1个回答
1
投票

您返回一个被拒绝的承诺,该承诺未得到处理,从而在全局范围内引发错误。要使用您的

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();

© www.soinside.com 2019 - 2024. All rights reserved.