我使用的是 angular 2,它是 http 组件。
我想调用一个将返回元素列表的 REST API。该列表的大小限制为 100 个条目。如果有更多项,将在响应中设置一个 hasMore
标志。然后您必须使用参数 page=2 再次调用 API。如果有一个 Observable,同时包含两个服务器响应,那就太好了。
我的代码看起来像这样:
call({page: 1})
.map(res => res.json())
.do((res) => {
if(res.meta.hasMore){
// do another request with page = 2
}
}
.map(...)
.subscribe(callback)
call
是一个将使用 http 模块发出请求并返回 Observable 的函数。在 if 语句中,我想发出另一个 http 请求并将结果放在同一个 Observable 上,以便使用订阅注册的回调将被调用两次(每个响应一次)。
我真的不知道该怎么做。我尝试使用 flatMap 发出下一个请求,但没有成功。
最佳答案
递归正是扩展运算符的用途:
let callAndMap = (pageNo) => call({page: pageNo}).map(res => {page: pageNo, data: res.json()}); // map, and save the page number for recursion later.
callAndMap(1)
.expand(obj => (obj.data.meta.hasMore ? callAndMap(obj.page + 1) : Observable.empty()))
//.map(obj => obj.data) // uncomment this line if you need to map back to original response json
.subscribe(callback);
关于javascript - 进行第二次 http 调用并在同一个 Observable 中使用结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38308866/