Angular 角度:如何处理异步问题?
我正在努力解决Angular 6的异步问题。 这里有一个例子。我只想进入“if”并显示控制台日志,但它从未发生过。getListOne和getListTwo调用一个可观察的API,并在我的html中很好地显示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
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