我们有一个将用布尔值响应的API
hasMore
和A
token
. 如果
哈斯莫尔
是
true
,我们可以使用它执行另一个API调用。
令牌
获取下一组结果。此过程需要重复,直到
哈斯莫尔
是
false
. 然后,整个结果列表需要作为一个单独的列表发出,并且需要完成可观测的列表。
我已经设法使用一个行为主题来实现这一点:
function getAll() {
const subject = new BehaviorSubject(undefined);
const obs = subject
.asObservable()
.pipe(
flatMap(token => getRes(token)
.pipe(
tap(result => result.hasMore ? subject.next(result.token) : subject.complete())
)
),
map(result => result.items),
reduce((acc, items) => acc.concat(items), [])
);
return obs;
}
(何处)
getRes()
返回一个Observable,该Observable使用提供的令牌执行API调用,并将API响应主体作为JSON发出)
见
https://rxviz.com/v/7J245RDo
然而,我想知道是否有一种纯粹的可观察的方法可以做到这一点,而不使用行为主题。我试着玩repeatwhen,但不知道如何更改输入数据,但仍然映射到响应数据。