通常情况下,Angular中Observable返回undefined的原因是在订阅之前触发了异步行为,导致Observable在返回数据之前被完成。因此,需要使用RxJS操作符来确保在订阅之前处理完所有异步操作。例如使用 combineLatest,forkJoin或者concatMap等操作符。 下面是使用concatMap操作符的示例代码:
import { Observable, of } from 'rxjs';
import { concatMap } from 'rxjs/operators';
...
observable$: Observable;
...
getData(): void {
this.observable$ = this.http.get('your-api-url');
}
...
this.observable$.pipe(
concatMap(data => {
if (data === undefined) {
return of([]);
}
return of(data);
})
).subscribe(data => {
console.log(data);
});