前端在处理流式请求时,通常使用@microsoft/fetch-event-source
这个开源库,这个库针对流式请求做了封装,增加了一些错误重试等逻辑。
开发时发现如果请求的接口报错,接口会持续重试。如果服务端接口真的有异常,重试过多会影响浏览器的性能,所以建议可以把重试去掉或者调整重试的间隔时间。
通过阅读本文,您可以获得:
- 流式处理时,接口异常时,如何禁止重试以及如何设置重试间隔
- 了解fetch-event-source的核心代码的逻辑
控制台查看,接口异常时的频繁重试,如下图
查看官方文档,并未发现相关说明。看了一下库的源码终于找到了解决方法。
下面是寻找答案的过程
当接口错误时会走到catch中,这也是为什么接口异常,会不断重试的原因
接口异常会走到catch里,当前请求没有abort掉,接着会执行定时任务:请求接口。
在源码中发现,是可以通过设置onerror回调函数进行重置是否需要重试。
翻译一下注释:
onerror是个回调函数,可以返回一个number,null,undefined或者抛出一个错误。
下面是解决方法
1. onerror回调函数抛出一个error,则重试终止
下面是抛出错误时,源码的执行过程:
2. onerror回调函数返回number,重试的间隔就以返回的number值为准,单位为毫秒,默认是1000毫秒
下面是返回数字时,源码的执行过程: