最有效的实战方式是直接开发完整小项目,如天气查询应用,需走通请求发起、数据解析、UI更新、异常反馈全链路,选用真实API,用async/await+try/catch处理错误,配合可选链与默认值保障健壮性,并添加加载状态与错误提示。

直接上手做一个能跑通、有交互、带错误处理的完整小项目,比如「天气查询应用」或「商品详情页」,是最有效的实战方式。核心不在于写多复杂的功能,而在于把请求发起、数据解析、UI更新、异常反馈这一整条链路走通。
选一个真实可调用的 API 入口
避免用假数据模拟,优先选公开、稳定、无需鉴权的接口:
- 天气类:OpenWeatherMap 免费版(需注册获取 key),或国内聚合数据提供的测试接口
- 内容类:JSONPlaceholder(https://jsonplaceholder.typicode.com/posts/1),返回标准 JSON,适合练结构解析
-
商品类:用本地 Express 搭个简易后端(如知识库中
/api/products/{id}示例),确保跨域已配cors()
关键点:URL 要能浏览器直访问,返回状态码是 200,响应体是合法 JSON —— 这是 fetch 能走通的前提。
用 async/await 写请求逻辑,别堆 .then 链
现代写法更清晰,也方便统一捕获错误:
- 定义异步函数,用
await fetch(url)等待响应 - 立刻检查
response.ok(不是只看 status === 200,它覆盖 200–299) - 再
await response.json()解析,这一步可能失败(比如返回 HTML 错误页) - 所有异常都进
try/catch,包括网络中断、CORS 被拒、JSON 格式错误
示例片段:
try {
const res = await fetch(`/api/products/${id}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
renderProduct(data);
} catch (err) {
showError(err.message);
}
}
渲染前做基础数据校验,防运行时崩溃
API 返回结构未必总如预期。尤其嵌套字段(如 data.weather[0].main)容易报 “Cannot read property '0' of undefined”:
- 用可选链操作符
?.安全取值:data?.weather?.[0]?.main - 对数组长度做判断:
if (data.forecast?.length) { /* 渲染预报列表 */ } - 为缺失字段设默认值:
const temp = data.main?.temp ?? '--'
这比在控制台看到红字报错后再补救,效率高得多。
加一层用户可见的状态反馈
纯白屏等待不是体验。哪怕只是小改动,也能显著提升真实感:
- 点击查询按钮后,禁用按钮 + 显示「加载中…」文字
- 用 CSS 控制
.loading类显示旋转动画或骨架屏 - 请求成功后,清空错误提示;失败时,把
err.message插入到错误区域并显式展示 - 不要依赖 console.log 调试 —— 把信息落到界面上,才叫“完成闭环”
不复杂但容易忽略。


















