Observable испускает только один раз, используя задержку в ConcatMap - PullRequest
1 голос
/ 09 июля 2020

Имея следующий код:

range(1, 30)
  .pipe(
    windowCount(10),
    concatMap(x => x.pipe(delay(5000))),
  )
  .subscribe(console.log);

По какой-то причине выдается только первое значение (1..10). Может ли кто-нибудь указать, что не так с приведенным выше кодом? Спасибо.

ожидаемый результат: 1..10 (задержка) 11..20 (задержка) и так далее ....

Ответы [ 2 ]

1 голос
/ 09 июля 2020

В итоге я использовал bufferCount , и ожидаемый результат был достигнут.

range(1, 30)
  .pipe(
    bufferCount(10),
    concatMap(x => x.pipe(delay(5000))),
  )
  .subscribe(console.log);

DEMO

1 голос
/ 09 июля 2020

Это происходит потому, что windowCount завершит предыдущее внутреннее «окно» перед созданием нового. Вы откладываете каждое «окно» на 5 секунд, но когда concatMap хочет подписаться на следующее «окно», оно уже завершено и никогда ничего не испускает.

Обратите внимание, что windowCount выдаст все windows как можно скорее независимо от того, имел ли concatMap шанс подписаться на них.

...