首页 > 解决方案 > 用“takeWhile”“扩展”,也应用一个限制,就像“take”一样

问题描述

我正在尝试获取所有页面,直到没有更多页面或达到某个限制(例如 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 选项构建该设备。

标签: angulartypescriptrxjs

解决方案


你描述的不正确。两者都在满足特定条件taketakeWhile完成链。当订阅者收到complete通知时,它会处理链,因此哪个先完成并不重要take*。它将始终完成链条。

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


推荐阅读