Rxjs使用switchMap时报错Type 'void'不可赋值给ObservableInput<any>如何解决?
错误原因
switchMap属于RxJS的高阶映射操作符,其传入的回调函数必须返回ObservableInput类型的值(包括Observable、Promise、可迭代对象等),你的回调中仅执行了console.log(data),该方法返回值为void,和switchMap要求的返回类型不匹配才触发报错,这属于用法错误,和RxJS的配置无关。
修复方案
根据你的实际使用场景选择对应处理方式:
- 如果你仅需要在流中间打印数据、执行不修改数据流的副作用操作,不需要切换到另一个Observable,直接使用
tap操作符即可:- 先引入tap操作符:
import { tap } from 'rxjs/operators';- 替换switchMap为tap:
this.foodOrderProvider.getFoodOrder(1) .pipe( tap(data => console.log(data)) ).subscribe(() => console.log("done")) - 如果你确实需要拿到第一个接口的返回值后,调用另一个返回Observable的异步方法,需要在switchMap的回调中返回对应的Observable实例:
this.foodOrderProvider.getFoodOrder(1) .pipe( switchMap(data => { console.log(data) // 示例:调用第二个返回Observable的接口,必须有return语句返回Observable return this.otherService.getOtherData(data.relatedId) }) ).subscribe(() => console.log("done"))
内容的提问来源于stack exchange,提问作者Jeremy Thomas
相关产品推荐
相关产品推荐

