«развернуть» с помощью «takeWhile», также применяя ограничение, как «take» делает - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь получить все страницы, пока не останется ни одной страницы или пока не будет достигнут некоторый лимит (скажем, 10 страниц).

Если я пойду таким образом:

obs.pipe(expand((page) => {
    return service.call(page).nextPage;
}), 
take(10), 
takeWhile(morePages));

Тогда дубль 10 всегда происходит.Если я пойду следующим образом:

obs.pipe(expand((page) => {
    return service.call(page).nextPage;
}), 
takeWhile(morePages),
take(10));

, тогда он может вызывать намного больше, чем 10 раз.

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

1 Ответ

2 голосов
/ 22 марта 2019

То, что вы описываете, не правильно. И take, и takeWhile завершают цепочку, когда выполняется определенное условие. Когда подписчик получает уведомление complete, он удаляет цепочку, поэтому не имеет значения, что take* завершает первым. Он всегда завершит цепочку.

Так что на самом деле не имеет значения, в каком порядке вы используете take(10) и takeWhile(morePages). Функциональность всегда одинакова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...