Как можно одновременно активировать только X наблюдаемых? - PullRequest
0 голосов
/ 08 сентября 2018

Я использую RxJS v6, но ответ может относиться и к RxJS v5.

Я бы хотел сделать так, чтобы, если бы я сказал 8 значений, я бы одновременно обрабатывал только 4.

Код, который я сейчас имею, отправляет 4 элемента, затем ждет, пока все 4 финишируют, затем отправляет следующие 4. Я бы хотел, чтобы он отправил первые 4, затем, когда наблюдаемое завершится, появится еще один. быть обработанным.

from([1, 2, 3, 4, 5, 6, 7, 8])
.pipe(
    bufferCount(4),
    concatMap(values => (
        from(values)
        .pipe(
            mergeMap(value => (
                timer(1000) // Async stuff would happen here
                .pipe(
                    mapTo(value),
                )
            )),
        )
    )),
)
.subscribe(console.log)

1 Ответ

0 голосов
/ 08 сентября 2018

Вы должны использовать второй параметр mergeMap, который является числом, которое позволяет указать параллелизм уровень , который вы хотите.

Так что ваш код может выглядеть как

from([1, 2, 3, 4, 5, 6, 7, 8])
.pipe(
    map(val => of(val)),
    mergeMap(val => val, 4),
)
.subscribe(console.log)

или

of([1, 2, 3, 4, 5, 6, 7, 8])
.pipe(
    mergeMap(val => val, 4),
)
.subscribe(console.log)

Учтите, что concatMap равно mergeMap с уровнем параллелизма, установленным на 1.

Прочтите этот пост для более подробной информации о mergeMap.

...