Angular 角度:如何处理异步问题?

Angular 角度:如何处理异步问题?,angular,asynchronous,ngoninit,Angular,Asynchronous,Ngoninit,我正在努力解决Angular 6的异步问题。 这里有一个例子。我只想进入“if”并显示控制台日志,但它从未发生过。getListOne和getListTwo调用一个可观察的API,并在我的html中很好地显示 ListOne = []; ListTwo = []; ngOninit() { this.getListOne(); this.getListTwo(); if (this.ListTwo.length > 0 ) { cons

我正在努力解决Angular 6的异步问题。 这里有一个例子。我只想进入“if”并显示控制台日志,但它从未发生过。getListOne和getListTwo调用一个可观察的API,并在我的html中很好地显示

ListOne = [];
ListTwo = [];

    ngOninit() {

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

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

    }
使用forkJoin

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


forkJoin( this.getListOne(), this.getListTwo()).subscribe((result: any[]) => {
       console.log("well done at least !";
}
forkJoin要求完成所有输入可观察项,但它也返回一个可观察项,该可观察项生成一个值,该值是输入可观察项生成的最后一个值的数组。换句话说,它等待最后一个可观察的输入完成,然后生成一个值并完成。

使用forkJoin

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


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

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

您需要
订阅可观察的内容,如:

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 !");
     }
   })
)
但我认为你需要更多地了解可观察的基本面。以下是关于可观测数据的文档:

您需要
订阅
观察对象,如:

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 !");
     }
   })
)
但我认为你需要更多地了解可观察的基本面。以下是关于可观测数据的文档:

您可以在
this.getListOne()中创建变量,如
listOneLoaded=false
listTwoLoaded=false
;这个.getListTwo()
方法您可以将它们设置为
true
,并在if条件下检查这些变量是否变为
true
,您可以在
this.getListOne()中创建变量,如
listOneLoaded=false
listTwoLoaded=false
;这个.getListTwo()
方法您可以将它们设置为
true
,并在if条件下检查这些变量是否变为
true