与“ takeWhile”一起使用“ expand”,同时应用一个限制,例如“ take”

时间:2019-03-22 03:51:30

标签: angular typescript rxjs

我正在尝试获取所有页面,直到没有更多的页面或达到一定的限制(例如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 个答案:

答案 0 :(得分:2)

您描述的内容不正确。满足特定条件时,taketakeWhile都会完成链。订户收到complete通知时,它会处理链,因此无论哪个take*首先完成都无关紧要。它将始终完成整个链。

因此,实际上,使用take(10)takeWhile(morePages)的顺序并不重要。功能始终相同。