javascript - Rxjs:重试 promise ?

标签 javascript rxjs rxjs5

想知道为什么我的 promise 正在解决但试图重试。

var getResultsStream = url => Rx.Observable.onErrorResumeNext( 
     Rx.Observable.defer( () => Rx.Observable
        .fromPromise( getSearchResults(url)
        .catch(error => Rx.Observable.of(`Error: ${error}`)) )
        .timeout(20000, new Error(`Timeout: ${url}`))
     )
     .do( e => console.log(`Retrying: ${url}`))
     .retry(3)
)

重试 Promise 3 次是更好的方法吗?

最佳答案

除非您对 defer 和/或 onErrorResumeNext 有特殊用途,否则您可以将其全部丢弃并简单地使用:

const request = url => Rx.Observable.of(url)
        .do(url => console.log("requesting: " + url))
        .switchMap(url => Rx.Observable.fromPromise(getSearchResults(url)))
        .timeout(20000, new Error(`Timeout: ${url}`))
        .retry(3);

request("http://foobar.com").subscribe(console.log, console.error);

function getSearchResults(url) {
  // simulating request-error
  throw new Error("Could not reach: " + url);
}
<script src="https://npmcdn.com/@reactivex/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="34464c5e4774011a041a0419565140551a0504" rel="noreferrer noopener nofollow">[email protected]</a>/dist/global/Rx.umd.js"></script>

关于javascript - Rxjs:重试 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41876379/

相关文章:

javascript - 使用 Mongoose 查找或创建

javascript - Promise.map 内的 Promise.map

angular - 如何修复无法读取未定义的属性 'next'?

javascript - 以 Rx 方式定期轮询

javascript - RxJS:Observable.create() 与 Observable.from()

javascript - 所有文件都使用myme text/html发送,忽略服务器node.js上的 header 函数writeHead

javascript - 用 6 种颜色填充 6x6 网格,相同颜色不相互接触

rxjs - 不退订的共享运营商

javascript - 如何在 rxjs 中解包 map 内的可观察对象?

angular - Response.json() 使用接口(interface)绑定(bind)到单个对象 - RxJs/Observable 失败