Angular:如何处理异步问题?

时间:2018-12-27 10:36:12

标签: angular asynchronous ngoninit

我正在努力处理与Angular 6有关的异步问题。 这是一个例子。我只想进入'if'并显示控制台日志,但这从未发生。 getListOne和getListTwo调用一个Observable API,并很好地显示在我的html上。

ListOne = [];
ListTwo = [];

    ngOninit() {

    this.getListOne();
    this.getListTwo();

    if (this.ListTwo.length > 0 ) {
        console.log("well done at least !";
    }

    }

2 个答案:

答案 0 :(得分:1)

使用forkJoin

import { forkJoin } from 'rxjs/internal/observable/forkJoin';  


forkJoin( this.getListOne(), this.getListTwo()).subscribe((result: any[]) => {
       console.log("well done at least !";
}

forkJoin要求完成所有输入可观察变量,但它还会返回一个可观察变量,该观察变量产生一个值,该值是输入可观察变量产生的最后一个值的数组。换句话说,它等待直到最后一个可观察输入完成,然后生成一个值并完成。

答案 1 :(得分:1)

您需要subscribe来观察类似的内容:

this.getListTwo().subscribe((result) => {
   if(result.length > 0){
    console.log("well done at least !");
   }
});

但是由于这是两个可观察对象并且它们在不同的时间完成,因此您需要将它们组合并订阅组合的可观察对象:

import {combineLatest} from 'rxjs';
import {tap} from 'rxjs/operators';

combineLatest(
    this.getListOne(),
    this.getListTwo()
).pipe(
   tap(([listOneResult, listTwoResult]) => {
     if(listTwoResult.length > 0){
       console.log("well done at least !");
     }
   })
)

但是我认为您需要更多地了解可观察的基本原理。这是有关Observables的文档: https://angular.io/guide/observables