javascript - 进行第二次 http 调用并在同一个 Observable 中使用结果

标签 javascript angular rxjs

我使用的是 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/

相关文章:

javascript - angular2 路由器导出登录后无法工作

angular - 将模板引用变量绑定(bind)为属性指令类型

javascript - 如果我在异步函数中用作引用,Angular2/Ionic2/TypeScript "two way"绑定(bind)不会更新

javascript - RxJs 从结果 Promise 创建 Observable

javascript - 如何在 Facebook AR studio 中使用 mp4 视频作为外部纹理?

javascript - JavaScript数组真的是map类型吗

angular - 在服务的构造函数中等待订阅

Angular 2 : Observable flatMap error Cannot read property 'subscribe' of undefined

javascript - 我需要一个非常具体的 jquery 选择器

javascript - jquery中如何显示图片