使用背压正确处理来自rxjs oberservable订阅的数据

使用背压正确处理来自rxjs oberservable订阅的数据,rxjs,backpressure,Rxjs,Backpressure,我有一个rxjs.observable(rxjs版本6.2.1),它返回url,我需要向其发出GET请求 var subscription = urlObservable$.subscribe( function (url) { console.log('new URL: ' + url); processURL(url) }, function (err) { console.log('Error: ' + err); }, function () { cons

我有一个
rxjs.observable
(rxjs版本6.2.1),它返回
url
,我需要向其发出
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)
发出请求。根据react原理,正确的方法是什么,处理所有这些传入URL并逐个发出请求,而不是在
subscribe
发出数据时立即触发所有请求?请注意,在这种情况下,可观察的
urlObservable$
返回数据的速度将比使用返回的
url
发出的请求快得多

processURL
可以返回一个
promise


谢谢

如果
urlObservable$
仅发出字符串,您只需使用
concatMap
即可,它始终等待上一个可观察对象完成:

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

即使
processURL
返回承诺,这也会起作用。

订户将获得的URL数量是否有限制?您不能修改事件发射器,使其仅在收集完所有url后才发出吗?observable将一次发出所有url,然后我使用flatMap进行一些异步检查。这包括一些延迟。因为有很多URL,所以我不想等到所有URL都检查完毕后再进行下一步。我认为这就是rxjs的全部要点,我可以更好地控制从一个步骤到下一个步骤的数据流,不是吗?问题和评论都是模棱两可的。在问题中你说你不想立刻处理它们,在评论中你说你不想等待。请您澄清一下您的意图好吗?我假设有一个最佳实践,它允许我在第一个URL进入订阅服务器时就开始处理URL,而不会在某个时候出现许多并行请求。所以@abetteroliver这两个词同时出现。这能做吗?也许我的假设是错误的。我仍然不明白所有的事情,但似乎你希望管道中的两个步骤并行处理,对吗?