老板:就是你小子删光了try-catch?

昨天我写了一篇《我删光了项目里的 try-catch,老板:6》

结果评论区一堆大佬冲我吼:

"还是小白,以后你会笑自己的😏"

"你这封装一爽,全组人都得背锅"

"大佬说实话,你们老板真的夸你了吗?"

我一看,哎哟喂,还真有点不对劲。

于是我去查了查,发现我那套"优雅不抛异常"的写法,

确实有点"优雅过头"了。

🧠 一、回顾一下我的骚操作

我封了个函数:

js 复制代码
const [err, data] = await safeRequest(api.getUser(1))
if (err) return showError(err)
console.log('✅ 用户信息:', data)
优点 说明
✅ 语法干净 不再满屏 try/catch,看着像天才写的代码
✅ 错误集中处理 统一封装,不用每个接口都写报错逻辑
✅ 数据结构统一 [err, data] 一眼明了

没有 try/catch

没有红红的异常,

只有干净的 [err, data]

看起来很爽,

但其实是埋雷现场。


💣 二、地雷一览

1️⃣ 语义错乱:async/await 被我玩坏了

正常语义:

成功 → 返回数据

失败 → 抛异常

我这一封装,全变成:

成功 → [null, data]

失败 → [err, null]

听起来挺合理?

但问题是------异常不会再抛了!

js 复制代码
const [err, res] = await safeRequest(api.getUser())
doSomething(res) // 🙃 忘了判断 err?那炸了

程序不崩,但逻辑早飞了。

这就是"静默失败"------最阴险的 bug。


2️⃣ 全局监控失效

大型项目一般都有全局异常捕获:
window.onerrorSentryVue.config.errorHandler......

但我 safeRequest 一上来,

直接把错误吞了,外层根本抓不到。

于是线上日志一片空白。

"奇怪,用户说崩了,我本地没问题啊?"


3️⃣ 框架级错误边界失效

Vue 的 errorCaptured、React 的 ErrorBoundary

都靠异常冒泡来兜底。

但我 safeRequest 一 catch,

框架根本感知不到错误。


✅ 三、改进方案:骚中带稳

js 复制代码
export async function safeRequest(promise, { showError = true, report = true } = {}) {
  try {
    const data = await promise
    return [null, data]
  } catch (err) {
    if (report) reportError(err) // ✅ 上报一下,别装死
    if (showError) ElMessage.error(err.message || '请求失败')
    console.error('[safeRequest 捕获]', err.stack)
    return [err, null]
  }
}

这样既能保持"优雅的姿势",

又不至于"优雅地把项目送上天"。🚀

但是还是会有人说有问题,听说已经有大佬封装了await-to-js能实现一样的效果,我直接用别人的准没问题了吧


老板:可以啊,这下你的防御性编程破了吧,明天去财务领奖赏

我:

相关推荐
专吃海绵宝宝菠萝屋的派大星9 小时前
使用Dify对接自己开发的mcp
java·服务器·前端
爱分享的阿Q9 小时前
Rust加WebAssembly前端性能革命实践指南
前端·rust·wasm
蓝黑20209 小时前
Vue的 value=“1“ 和 :value=“1“ 有什么区别
前端·javascript·vue
小李子呢02119 小时前
前端八股6---v-model双向绑定
前端·javascript·算法
He少年10 小时前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
史迪仔011210 小时前
[QML] QML IMage图像处理
开发语言·前端·javascript·c++·qt
AI_Claude_code10 小时前
ZLibrary访问困境方案四:利用Cloudflare Workers等边缘计算实现访问
javascript·人工智能·爬虫·python·网络爬虫·边缘计算·爬山算法
AwesomeCPA10 小时前
Miaoduo MCP 使用指南(VDI内网环境)
前端·ui·ai编程
前端大波10 小时前
前端面试通关包(2026版,完整版)
前端·面试·职场和发展
qq_4335021810 小时前
Codex cli 飞书文档创建进阶实用命令 + Skill 创建&使用 小白完整教程
java·前端·飞书