【问题标题】:How to use multiple Http Requests in Angular 4如何在 Angular 4 中使用多个 Http 请求
【发布时间】:2017-12-20 09:35:00
【问题描述】:

我正在使用 Angular 4 和一个 API 制作一个简单的应用程序,该应用程序有几个页面来满足他们的请求。

例如,我使用此 url 获得前 10 个字符: http://swapi.co/api/people/

为了得到接下来的 10 个人,我必须向这个 url 提出请求:http://swapi.co/api/people/?page=2

如何在一个请求中获得所有人?或者通过良好实践提出所有请求的解决方案是什么?

【问题讨论】:

  • @jonrsharpe 为什么要删除代码以及当我说“谢谢”时?
  • 因为包含答案并说“谢谢”不是问题。当您的问题得到解答时,请参阅 stackoverflow.com/help/someone-answers 以了解适当的操作。
  • 我认为代码可以在这种情况下帮助人们。而“提前致谢”意味着感谢那些将解决这个问题的人,它与答案无关。不过没关系
  • 只是一个评论,但数据不应该在页面更改时异步加载吗?

标签: javascript angular api typescript


【解决方案1】:

您必须使用forkJoin 方法才能从多个来源加载数据。

首先,将它们包含在typescript 文件中。

import {Observable} from 'rxjs/Rx';

更新

对于新版本的 Angular,请使用:

import { forkJoin } from 'rxjs';

很多时候,我们需要从多个来源加载数据,我们需要等到所有数据都加载完毕。

forkJoin 方法包装了多个Observables。换句话说,我们使用forkJoin 来运行concurrent http requests

forkJoinsubscribe() 方法在整个 Observables 集合上设置处理程序。

您可以阅读有关 forkJoin here 的更多信息,包括很多示例。

假设您必须获得前 10 页。

var pages:number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

或者简单地说:var pages:number[] = new Array(10).fill().map((v, i) => i + 1);

// map them into a array of observables and forkJoin
return Observable.forkJoin(
   pages.map(
      i => this.http.get('http://swapi.co/api/people/?page=' + i)
        .map(res => res.json())
   )
).subscribe(people => this.people = people);

【讨论】:

  • 感谢您的回答。我根据您的建议编辑了我的问题。
  • @QuentinIcky,错误是您使用第二个map 方法错误。第二个map 方法附加到this.http.get..。 (就像我的回答一样)
  • 谢谢,没错!我用新代码编辑了这个问题。我没有收到任何错误,但现在人们从视图中消失了。如何记录响应并将数据使用到组件文件中?
  • @QuentinIcky,我发现了错误.. 使用return Observable.forkJoin 而不是Observable.forkJoin
  • 干得好!我知道这是一个return 问题,但我没有找到在哪里!非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2018-03-30
  • 2014-05-30
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多