правильный способ обработки данных из наблюдаемой подписки rxjs с обратным давлением - PullRequest
0 голосов
/ 13 июня 2018

У меня есть 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 голосов
/ 13 июня 2018

Если urlObservable$ излучает только строки, вы можете просто использовать concatMap, который всегда ожидает завершения предыдущего наблюдения:

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

Это будет работать, даже если processURL возвращает Обещание.

...