
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 可行,谢谢 |