← 中文资源

简体中文版本

浏览器 Uncaught (in promise) TypeError

修复控制台的 “Uncaught (in promise) TypeError”:补充 await、处理 rejection,并在访问属性前校验响应体。

阅读英文原文

症状

控制台记录 Uncaught (in promise) TypeError,且常带延迟、堆栈起点位于框架代码中。包裹调用的 try/catch 似乎不起作用。

诊断

沿异步堆栈追踪,并在访问属性前打印取值:

async function load() {
  const res = await fetch('/api/user');   // no catch
  const data = await res.json();
  console.log(data);                       // inspect shape
  return data.profile.name;                // TypeError if profile missing
}
load(); // returned promise unhandled

修复

处理 rejection 并校验数据形状:

async function load() {
  try {
    const data = await (await fetch('/api/user')).json();
    return data?.profile?.name ?? 'anonymous';
  } catch (err) {
    console.error('load failed', err);
    return null;
  }
}
await load(); // or void load().catch(...)

验证

再次触发该操作;控制台不再有未处理的 promise 错误,界面展示数据或受控的错误状态。