我正在尝试获取所有页面,直到没有更多的页面或达到一定的限制(例如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选项来构建该设备。
答案 0 :(得分:2)
您描述的内容不正确。满足特定条件时,take
和takeWhile
都会完成链。订户收到complete
通知时,它会处理链,因此无论哪个take*
首先完成都无关紧要。它将始终完成整个链。
因此,实际上,使用take(10)
和takeWhile(morePages)
的顺序并不重要。功能始终相同。