typescript - forkJoin 结果与源中的地图
问题描述
我正在尝试使用forkJoin
将几个可观察对象(真实代码中的 http 请求)的结果放在一起。
其中一个源 observable(mainObs
如下)map
应用了一个运算符,以便输出与其他 observable 具有相同的格式。
我的问题是,在forkJoin
订阅中,第一个结果是一个 observable,而不是第一个 observable 的输出。
这是一个示例代码,带有一个stackblitz 演示。
我错过了什么吗?
import { forkJoin, Observable, of } from 'rxjs';
import { map } from 'rxjs/operators';
let mainObs = of("main").pipe(map(res => of({success: true, result: res})));
let listOfObservables: Observable<any>[] = [mainObs];
listOfObservables.push(createObs());
listOfObservables.push(createObs());
forkJoin(listOfObservables).subscribe((res: any[]) => {
console.log(res);
//Problem: res[0] is an Observable, not a value
console.log(res[0].success);// <==error
});
function createObs()
{
return of({success: true, result: "dummy"})
}
解决方案
of
创建一个新的可观察对象。因此mainObs
,当它返回时,您会返回一个新的 observable。
您可能打算返回实际结果:
import { forkJoin, Observable, of } from "rxjs";
import { map } from "rxjs/operators";
let mainObs = of("main").pipe(map(res => ({ success: true, result: res })));
// creating a typed array helps preventing this problem early.
let listOfObservables: Observable<{ success: boolean; result: string }>[] = [
mainObs
];
listOfObservables.push(createObs());
listOfObservables.push(createObs());
forkJoin(listOfObservables).subscribe(
(res: { success: boolean; result: string }[]) => {
console.log(res);
console.log(res[0].success); // <== ok
}
);
function createObs() {
return of({ success: true, result: "dummy" });
}