1
laxenade 2017-10-06 06:52:47 +08:00
你可以试试 RxJS 的 RetryWhen。应该还有其他方法,优雅的暂时只想到了这个。
|
2
baskice OP @laxenade 简单包起来即可……不需要这么复杂的……这重试比我代码都长了 https://github.com/Reactive-Extensions/RxJS
|
3
xrr2016 2017-10-06 07:31:57 +08:00 via Android
干嘛不用 Promise.all
|
4
vghdjgh 2017-10-06 08:28:38 +08:00
虽然是 reconnection 库,也可以用来做 retry
https://github.com/plantain-00/reconnection#usage |
5
rekulas 2017-10-06 08:32:12 +08:00
可以用 coinmarketcap 的数据吧,已经帮你整合好了
|
6
wxt2005 2017-10-06 08:47:13 +08:00 1
|
7
k9982874 2017-10-06 08:53:57 +08:00
为啥不直接用 setTimeout ?
|
8
NemoAlex 2017-10-06 09:30:05 +08:00 via iPhone
在解决这个问题之前,你需要先弄清楚几个事情:
是前端用还是 Node 用?使用哪个 HTTP Client 库? 前端用的话,用户的浏览器会不会不支持 Promise ?如果存在的话,是不用 Promise,还是加一个 Polyfill ? 从你写的东西来看,对于 JS 的基础理解还不够,建议先完善下基础。 我比较推荐的方式是采用 Promise + axios。至于 retry,有个 axios retry 的插件,不过不能很好地处理超时的情况。如果这方面是必须的话,建议自己简单写实现一下。 |
9
iamppz 2017-10-06 09:42:35 +08:00 via iPhone
ES6 的 promise 几行代码的事情
|
10
cloud107202 2017-10-06 10:55:04 +08:00 2
```
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-06 14:16:53 +08:00 via Android
@cloud107202 race 不更好吗。。。对 chrome 更友好
|
12
cloud107202 2017-10-06 18:38:26 +08:00
@azh7138m 是 Promise.race() 么
|
13
azh7138m 2017-10-06 18:44:01 +08:00 via Android
@cloud107202 嗯,稍微封装下就有超时重试了
|
14
baskice OP Promise 可行,谢谢
|