fetch-event-source请求接口异常时如何禁止一直重试

5,883 阅读1分钟

前端在处理流式请求时,通常使用@microsoft/fetch-event-source 这个开源库,这个库针对流式请求做了封装,增加了一些错误重试等逻辑。

开发时发现如果请求的接口报错,接口会持续重试。如果服务端接口真的有异常,重试过多会影响浏览器的性能,所以建议可以把重试去掉或者调整重试的间隔时间。

通过阅读本文,您可以获得:

  1. 流式处理时,接口异常时,如何禁止重试以及如何设置重试间隔
  2. 了解fetch-event-source的核心代码的逻辑

控制台查看,接口异常时的频繁重试,如下图 接口异常时的频繁重试

查看官方文档,并未发现相关说明。看了一下库的源码终于找到了解决方法。

下面是寻找答案的过程

当接口错误时会走到catch中,这也是为什么接口异常,会不断重试的原因

image.png

image.png 接口异常会走到catch里,当前请求没有abort掉,接着会执行定时任务:请求接口。

image.png 在源码中发现,是可以通过设置onerror回调函数进行重置是否需要重试。

image.png 翻译一下注释: image.png onerror是个回调函数,可以返回一个number,null,undefined或者抛出一个错误。

下面是解决方法

1. onerror回调函数抛出一个error,则重试终止

image.png

下面是抛出错误时,源码的执行过程:

image.png

image.png

2. onerror回调函数返回number,重试的间隔就以返回的number值为准,单位为毫秒,默认是1000毫秒

image.png 下面是返回数字时,源码的执行过程: image.png