前端/移动开发面试题更新 2026-08-05

在 Koa 框架下,需要怎样为请求加入重试功能?请说明实现思路和关键点。

前端/移动开发问题拆解技术原理方案权衡Koa

考察说明

考察对 Koa 中间件机制和异步错误处理的理解,以及如何设计可靠的重试逻辑。

回答思路

  1. 【回答框架 1】Koa 是基于洋葱模型的中间件框架,请求会依次经过各层中间件。实现重试机制,核心是捕获请求处理过程中的错误,并在满足条件时重新执行整个请求流程或特定业务逻辑。通常可以将重试逻辑封装为一个中间件,包裹后续的处理函数。
  2. 【回答框架 2】具体实现时,在中间件中定义一个 async 函数,内部用循环或递归控制重试次数。每次尝试时,通过 try/catch 捕获下游抛出的错误。如果错误可重试(例如网络超时、临时性错误)且重试次数未超限,则等待一定间隔后继续下一次尝试;否则向上抛出错误。需要注意的是,Koa 的 ctx 对象在一次请求中会被复用,重试前应清理可能被修改的状态,比如响应体、状态码等。
  3. 【回答框架 3】另一种常见方式是使用专门的库,如 async-retry 或 p-retry,它们提供了更灵活的重试策略,例如指数退避、抖动和重试条件判断。在 Koa 中集成时,可以将业务逻辑封装成一个函数,用库的重试方法包裹,再在中间件中调用。
  4. 【回答框架 4】重试机制需谨慎设计,避免对非幂等操作(如创建订单、支付)进行盲目重试,否则可能导致重复提交。应提供重试条件的配置,并考虑是否在请求头中携带唯一标识,配合业务侧去重。同时,重试间隔不宜过短,防止对下游系统造成压力。
  5. 【关键点 1】中间件中通过 try/catch 捕获错误并控制重试次数。
  6. 【关键点 2】重试前需重置响应状态,防止残留数据影响结果。
  7. 【关键点 3】利用成熟的库如 async-retry 可简化实现,支持退避策略。
  8. 【关键点 4】必须考虑操作幂等性,避免对非幂等操作重复执行。
  9. 【关键点 5】重试条件应明确,如网络错误可重试,业务错误不可重试。
  10. 【易错点 1】忽略对 ctx 状态的清理,导致重试时输出上一次的错误响应。
  11. 【易错点 2】对非幂等操作盲目重试,产生重复数据。
  12. 【易错点 3】重试间隔过短或无限重试,给下游系统带来压力。