Angular:WAITING加载异步数据的正确方法

标签 angular typescript

我必须进行多次 API 调用(http 请求)才能获取我需要的所有数据。

由于我必须进行 2 个独立的 API 调用,这两个 API 调用都应该完成检索数据,所以我正在尝试与之同步。

我在 typescript /Angular 方面几乎没有经验,无法通过谷歌找到解决方案。

这是我正在进行的 API 调用(签名):

public supportedLanguages(observe?: 'body', reportProgress?: boolean): Observable<Array<string>>;
public getAllFilters(acceptLanguage?: string, observe?: 'body', reportProgress?: boolean): Observable<Array<Filter>>;

这是我目前用来填写 Array<Type> 的代码:

this.langService.supportedLanguages().subscribe(langs => setTimeout(() =>
  this.langs.push(...langs), 1000));
this.categorieService.getAllFilters('de').subscribe(categories => setTimeout(() => {
  this.categories.push(...categories), 1000));

我猜这不是检索数据的正确方法,但我还没有找到更好的方法(我是 typescript/angular 的新手)。

等待所述数据加载的正确步骤是什么?

最佳答案

你可以使用

(我正在使用“rxjs”:“^5.5.11”)。

forkJoin

import 'rxjs/add/observable/forkJoin';
import { Observable } from 'rxjs';
import { Subscription } from 'rxjs/Subscription';


/* Multiple Service calls are asynchronism. use forkJoin to group service calls */  
Observable.forkJoin(
  this.supportedLanguages();
  this.getAllFilters()
).subscribe(
    response =>{
      //response[0] is data returned by API supportedLanguages
      //response[1] is data returned by API getAllFilters
    }
    error => console.log("Error: ", error),
    () =>{
      //All the API calls are completed here. Put your code here
      //codes should be executed after the completion of all API calls
    }
)

关于Angular:WAITING加载异步数据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53752965/

相关文章:

Angular 2+ Unitest 提供带有窗口注入(inject)对象的指令

从类型参数进行 typescript 类型推断

javascript - 如何使用 libphonenumber AsYouTypeFormatter 处理退格键

jquery - Angular 2简单饼图不起作用

angular - 如何在页面上播放音频加载或每个设置间隔为 Angular 6+

angular - 如何通过路由路径调用组件的指定方法?

typescript - 了解 TypeScript 中的通用约束扩展

d3.js - d3 V4.2.1 TypeScript 2.0 错误导入 d3-selection-multi

javascript - MQTT.js - 如何处理连接错误?

javascript - 将多个服务插入服务 - angular2