标准答案

  1. callback 必须检查第一个 error 参数,不能同时调用成功和失败回调。
  2. Promise 链中抛出的异常会转成 rejection,终点应有 catch 或由框架统一处理。
  3. async 函数返回 Promise,await 的 rejection 要在合适的边界捕获并映射错误。
  4. 错误处理应区分可重试、可展示和需要告警的错误,不能统一吞掉。

题目解析

callback 通过 error-first 约定传递失败,Promise 通过 reject,async 函数则把异常转换为 rejected Promise。错误必须在明确的异步边界处理,不能期待同步 try/catch 捕获尚未执行的回调。

Promise 链要返回下一个 Promise,才能让调用方等待和捕获;await 的 try/catch 应包住真正的 await,并区分业务可展示错误、可重试错误和需要告警的故障。

统一错误映射不能吞掉原始 cause、请求 ID 和下游状态。对写操作,捕获异常后还要判断副作用是否已经发生,不能用返回 undefined 伪装成功。

常见误区

  • 误区:忘记 return Promise,调用方提前结束。改正:返回完整的 Promise 链或 await 它,并用测试验证完成时机。
  • 误区:await 没有 catch 导致未处理 rejection。改正:在业务边界处理或交给明确的全局错误监控,不要依赖进程级兜底恢复。
  • 误区:catch 后返回 undefined 隐藏故障。改正:区分合法空值和失败,返回稳定错误或明确降级结果。

作者信息