Resolver 中的链相关 Observable

Chain Dependant Observables in Resolver

我有一个解析器需要在加载页面之前从两个依赖的 API 中获取数据。第二次调用由第一次调用的结果定义,所以我尝试链接这两个可观察对象并且需要 return 解析器末尾的第二个。

在我尝试链接我拥有的可观察对象之前:

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<MySecondObservable> {
        
        const observable1 = this.myService.getFirstDataSet();
        observable1.subscribe(
             firstDataSet => this.myService.firstDataSet = firstDataSet;
        );
    
        const observable2 = this.myService.getSecondDataSet(); // this requires data from firstDataSet
        observable2.subscribe(
             secondDataSet => this.myService.secondDataSet = secondDataSet;
        );

        return observable2;
    }

这显然是错误的,当我尝试应用一些 RxJs 方法来管理这些可观察对象时,我在第二个可观察对象调用中收到错误消息,指出 firstDataSet 未定义。 这是我到目前为止得到的:

    return observable1.pipe(
        tap( firstDataSet => this.myService.firstDataSet = firstDataSet),
        mergeMap( () => observable2.pipe(
            tap(secondDataSet => this.myService.secondDataSet = secondDataSet            
            ) 
        )
    )

在每个可观察的最终结果中,我想将接收到的数据存储到服务中,因此 tap()。关于 RxJS 的文档非常多,以至于我发现作为初学者很难找到我想要的东西。 感谢您的帮助!

编辑:

我按照提示修改了代码,还是报错

const observable2 = this.myService.getSecondDataSet();

此方法需要解析 firstDataSet 才能工作。但是 myService.firstDataSet 未定义的控制台日志。

如果我理解正确(你想发起一个API调用,等待它完成,然后根据结果再发送一个API请求),那么你需要使用 switchMap 运算符:

return observable1.pipe(
    tap( firstDataSet => this.myService.firstDataSet = firstDataSet),
    switchMap( observable1Result => observable2 ),
    tap(secondDataSet => this.myService.secondDataSet = secondDataSet)            

)