Angular RxJS报错Observable<Subscription>无法赋值给Observable<MyData>如何解决
问题原因
你的写法错误出在map操作符中调用了subscribe(),subscribe()返回的是订阅对象Subscription而非MyData类型,导致最终返回的Observable泛型不匹配,触发类型报错。另外在RxJS流中不应该在操作符内部主动订阅内部Observable,需要用高阶映射操作符处理嵌套的异步流。
解决方法
使用switchMap(可根据场景替换为其他高阶操作符)替代原来的map来处理嵌套的服务请求,修正后的代码如下:
// 先引入需要的rxjs操作符 import { switchMap, map } from 'rxjs/operators'; searchData(): Observable<MyData> { const url = `${this.context}/search`; return this.http.get<MyData>(url) .pipe( // switchMap接收上游的myData,返回第二个服务的Observable switchMap((myData: MyData) => { return this.secondService.getOtherData().pipe( // 合并两个服务的返回结果 map((otherData) => { // 此处替换为你自己的业务处理逻辑 myData.extraData = otherData; return myData; }) ) }) ); }
操作符选型说明
- 如果需要严格保证请求顺序,前一个请求完全结束再处理下一个,可将
switchMap替换为concatMap - 如果需要保留所有请求的返回结果,可替换为
mergeMap - 如果只需要处理最后一次触发的请求,
switchMap是最优选择,它会自动取消之前未完成的内部订阅
内容的提问来源于stack exchange,提问作者Code Guru
相关产品推荐
相关产品推荐

