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