1
laxenade 2017 年 10 月 6 日
你可以试试 RxJS 的 RetryWhen。应该还有其他方法,优雅的暂时只想到了这个。
|
2
baskice OP @laxenade 简单包起来即可……不需要这么复杂的……这重试比我代码都长了 https://github.com/Reactive-Extensions/RxJS
|
3
xrr2016 2017 年 10 月 6 日 via Android
干嘛不用 Promise.all
|
4
vghdjgh 2017 年 10 月 6 日
虽然是 reconnection 库,也可以用来做 retry
https://github.com/plantain-00/reconnection#usage |
5
rekulas 2017 年 10 月 6 日
可以用 coinmarketcap 的数据吧,已经帮你整合好了
|
6
wxt2005 2017 年 10 月 6 日 |
7
k9982874 2017 年 10 月 6 日
为啥不直接用 setTimeout ?
|
8
NemoAlex 2017 年 10 月 6 日 via iPhone
在解决这个问题之前,你需要先弄清楚几个事情:
是前端用还是 Node 用?使用哪个 HTTP Client 库? 前端用的话,用户的浏览器会不会不支持 Promise ?如果存在的话,是不用 Promise,还是加一个 Polyfill ? 从你写的东西来看,对于 JS 的基础理解还不够,建议先完善下基础。 我比较推荐的方式是采用 Promise + axios。至于 retry,有个 axios retry 的插件,不过不能很好地处理超时的情况。如果这方面是必须的话,建议自己简单写实现一下。 |
9
iamppz 2017 年 10 月 6 日 via iPhone
ES6 的 promise 几行代码的事情
|
10
cloud107202 2017 年 10 月 6 日 ```
function timeout(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } // e.g. async function waiting_until_succeed(retry_interval = 2000) { try { const result = await api_client.getXXByXX(); } catch (err) { logger.info(` ${err.message}`); await timeout(retry_interval); return waiting_until_succeed(); } } ``` |
11
azh7138m 2017 年 10 月 6 日 via Android
@cloud107202 race 不更好吗。。。对 chrome 更友好
|
12
cloud107202 2017 年 10 月 6 日
@azh7138m 是 Promise.race() 么
|
13
azh7138m 2017 年 10 月 6 日 via Android
@cloud107202 嗯,稍微封装下就有超时重试了
|
14
baskice OP Promise 可行,谢谢
|