需求:轮训10次,成功 cancel
取消轮训,失败 pollingErrorRetryCount
上限轮训次数,需要捕获失败并结束轮训发送通知。
目前只能解决 pollingErrorRetryCount
上限结束轮训,如果要在最后一次捕获通知就需要考虑额外的办法。
这是我目前的解决办法,演示链接:
https://codesandbox.io/s/du-qu-yong-hu-ming-cheng-forked-cxhp4k?file=/App.tsx:403-425
很不好,我是通过 onError
,将参数轮训次数递增,达到上限次数捕获错误,这样就要给请求方法增加一个额外参数
建议增加一个类似 onOver
的方法,在最后一次失败轮训的时候能够调用这个方法,类似 onFinally
6条答案
按热度按时间n8ghc7c11#
感觉可以增加一个钩子函数。你们觉得呢 cc @brickspert@crazylxr
lhcgjxsq2#
我觉得可以先不加
6g8kf2rb3#
我觉得可以先不加
@hchlq@crazylxr 抱歉,我提的建议有个小失误,能否给现有的方法
onSuccess
,onError
、onFinally
增加一个当前请求次数的参数,而不是增加一个回调方法,因为我在onSuccess
中也需要用到请求计数,例如或者是将
TParams
对象改为对象类型返回回来,类似:其中
count
表示累计轮训的次数vsaztqbk4#
我示范一个项目用到的轮训,大概就明白现在有多麻烦了。我们有这么一个请求,提交操作后,异步轮训获取状态,超过10次没有返回完成状态,就报告异常。如下:
其中
run
的时候除了要提供请求参数以外,还有增加一个初始参数0
px9o7tmv5#
const { pollingCount } = useRequest(getJobInfo)
如果这样返回是不是也可以满足你的需求?
pengsaosao6#
之前也有 issue 说需要 是否正在轮询这样的状态,可以看下这个 issue ,所以我在想要不返回值里就增加一个轮询相关的对象。把轮询的状态和轮询的次数都返回回来,api 大概像这样。
polling 的定义像这样