0

我正在努力处理 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 !";
    }

    }
4

2 回答 2

1

使用 forkJoin

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


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

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

于 2018-12-27T10:44:43.560 回答
1

你需要subscribe观察像:

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

但由于这是两个 observable,它们在不同的时间完成,你需要将它们组合起来并订阅组合后的 observable:

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

于 2018-12-27T10:49:44.240 回答