Промежуточное решение RxJS FlatMap и ConcatMap?

У меня есть приложение, написанное на машинописном языке с использованием rxjs, где я использую flatMap для возврата списка из 5000 наблюдаемых, но я не хочу, чтобы все они были подписаны одновременно.

Я пытался использовать concatMap, но это очень замедляет работу моего приложения, поскольку оно обрабатывается один за другим последовательно.

Я заинтересован в создании чего-то вроде пула из 10 подписок, где, когда одна заканчивается, другая начинается, это будет поддерживать активными только 10 подписок одновременно.

Я думаю, что могу создать ручное управление этим, но мне интересно узнать, есть ли лучший подход, используя какую-то другую карту или стратегию.


person justcode    schedule 20.12.2018    source источник
comment
зачем вам 5000 наблюдаемых? можете ли вы добавить более подробную информацию о том, чего вы пытаетесь достичь?   -  person Anas    schedule 20.12.2018
comment
@ Anas У меня есть список идентификаторов, из которых нужно получать данные через соединение Bluetooth.   -  person justcode    schedule 20.12.2018
comment
Попробуйте использовать mergeMap, который принимает параметр concurrent, ограничивающий параллелизм. concatMap реализован с использованием mergeMap с параллелизмом 1.   -  person cartant    schedule 21.12.2018
comment
@cartant это именно то, что я искал. На самом деле flatMap — это псевдоним для mergeMap.   -  person justcode    schedule 21.12.2018


Ответы (1)


Совет @cartant помог мне найти решение, для приведенного ниже кода вы можете использовать flatMap или mergeMap, поскольку они одинаковы.

this.service.getData(id).flatMap(data => {
  return Observable.of(data);
}, 10).do(value => {
  console.log(value);
})

Этот код предназначен только для передачи идеи использования параллельного параметра flatMap/mergeMap. Число 10 является параллельным параметром.

person justcode    schedule 21.12.2018