通过背压来处理来自rxjs oberservable订阅的数据的正确方法

时间:2018-06-13 13:23:54

标签: rxjs backpressure

我有一个rxjs.observable(rxjs版本6.2.1),它返回urls我需要发出GET个请求。

var subscription = urlObservable$.subscribe(
  function (url) {
    console.log('new URL: ' + url);
    processURL(url)
  },
  function (err) { console.log('Error: ' + err); },
  function () { console.log('Completed'); }
);

对于每个url,我需要通过函数processURL(url)发出请求。根据反应原理,正确的方法是处理所有这些传入的URL并逐个发出请求,而不是在subscribe发出数据后立即触发所有这些请求?请注意,在这种情况下,可观察的urlObservable$将比返回的url所需的请求更快地返回数据。

processURL可以返回promise

感谢。

1 个答案:

答案 0 :(得分:2)

如果urlObservable$仅发出字符串,则只需使用始终等待上一个Observable完成的concatMap

urlObservable$
  .pipe(
    concatMap(url => processURL(url)),
  )
  .subscribe(...);

即使processURL返回Promise,这也会有用。