求类似RxJS switchMap的操作符,可同时获取首个Observable结果
解决方案:在switchMap内部组合两个结果
不需要额外的“otherOperator”,你可以直接在switchMap内部的Observable链中,用map操作符把HTTP请求结果和数据库存储结果组合起来,这样下游就能同时获取两者。
实现方式1:返回数组
this.http.get(...).pipe( switchMap(httpResult => this.database.storeValue(httpResult.objectA).pipe( // 将数据库结果与HTTP请求结果组合成数组 map(databaseResult => [httpResult, databaseResult]) ) ) ).subscribe(([httpResult, databaseResult]) => { // 现在可以同时使用两个结果 console.log('HTTP结果:', httpResult); console.log('数据库存储结果:', databaseResult); });
实现方式2:返回对象(可读性更好)
如果觉得数组解构不够直观,也可以返回一个包含两个结果的对象:
this.http.get(...).pipe( switchMap(httpResult => this.database.storeValue(httpResult.objectA).pipe( map(databaseResult => ({ httpResult: httpResult, databaseResult: databaseResult })) ) ) ).subscribe(({ httpResult, databaseResult }) => { // 直接通过对象属性访问结果 console.log('HTTP结果:', httpResult); console.log('数据库存储结果:', databaseResult); });
为什么之前的操作符没用?
你尝试的concatWith、concatMap是用来处理多个Observable的串行执行,而不是将前一个Observable的结果与当前Observable的结果合并。这里的核心是在switchMap内部保存住httpResult的引用,等数据库操作完成后,再把两个结果一起传递下去。
内容的提问来源于stack exchange,提问作者Wouter Vandenputte
相关产品推荐
相关产品推荐

