
如何用listr2让失败任务自动重试retry与retryDelay完整示例【免费下载链接】listr2NodeJS Task List derived from the best! Create beautiful CLI interfaces via easy and logical to implement task lists that feel alive and interactive.项目地址: https://gitcode.com/gh_mirrors/li/listr2listr2 是一个 NodeJS 任务列表库用它创建的 CLI 任务清单会像活的一样——可以动画、可以交互。而今天要讲的是它最实用的能力之一任务失败自动重试。只需给任务配置retry属性v3.4.0 起支持配合retryDelayv6.0.0 起支持控制重试间隔你几乎不需要写任何额外代码就能让不稳定的任务网络请求、依赖安装等自动再来一次。1. 快速上手一个属性搞定自动重试在 listr2 的任务对象里加上retry: 3意思是任务失败后再重试 3 次共执行 4 次。完整示例见 basic.tsconst tasks new Listr([ { title: Some type errors, task: async () { await delay(1000) throw new Error(This type can not be assigned to type with, oh noes) }, retry: 3 // 关键就这一行失败后自动重试 3 次 } ])任务每次失败后listr2 会把它标记为RETRY状态并重新执行当重试次数耗尽才真正抛出错误交给 listr2 的错误处理流程如exitOnError。 小贴士被用户中断CtrlC的任务永远不会被重试这一点在 task.ts 源码中有明确注释 never retry an interrupted task。2. retryDelay让重试之间喘口气连续重试往往没有意义比如等一个远程服务恢复。从 v6.0.0 开始retry可以写成对象同时指定重试次数和重试延迟示例见 retry-delay.tsretry: { delay: 1000, // 每次重试前等待 1 秒 tries: 3 // 最多重试 3 次 }等待期间任务会进入paused暂停状态默认渲染器DefaultRenderer会通过pausedTimer选项显示一个实时的倒计时让终端用户清楚地知道正在等待下一次尝试。你也可以在任务内部用task.isPaused()判断当前是否处于该状态。3. 让任务自知之明isRetrying() 获取重试次数与上次错误重试机制是自感知的。通过task.isRetrying()你可以在任务执行时拿到一个对象count当前是第几次重试首次执行为0error上一次失败捕获到的错误对象查看重试次数示例见 retry-count.tsconst retry task.isRetrying() if (retry.count 0) { task.title This means I am retrying. task.output [I am retrying for the %dth time., retry.count] }根据上次错误改变策略示例见 last-error.tsconst retry task.isRetrying() if (retry.count 0 retry.error instanceof TimeoutError) { task.title Slow network, taking a longer path. }这非常适合错误驱动的策略第一次失败是超时就用慢路径重试是权限错误则直接放弃。4. 各渲染器下的重试表现不同渲染器对重试的呈现方式略有差异详见 docs/task/retry.md渲染器重试时的表现DefaultRenderer任务标题会重置回原标题配合倒计时动画展示等待SimpleRenderer / VerboseRenderer每次重试会额外输出一条带当前次数的RETRY日志而不是原地刷新标题 在 ListrTaskRetry 接口 中可以看到retry状态的完整类型定义。5. 总结简单重试给任务加retry: 3即可带间隔重试使用对象形式retry: { delay: 1000, tries: 3 }等待期间有实时倒计时智能重试用task.isRetrying()读取重试次数与上次错误实现差异化恢复策略被中断的任务不会重试保证用户体验。现在回到你的终端脚本把那些偶发失败就整体报错的任务标上retry你的 CLI 工具会瞬间专业不少。【免费下载链接】listr2NodeJS Task List derived from the best! Create beautiful CLI interfaces via easy and logical to implement task lists that feel alive and interactive.项目地址: https://gitcode.com/gh_mirrors/li/listr2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考