【问题标题】:SwitchMap: Type 'void' is not assignable to type 'ObservableInput<any>' for http responseSwitchMap:类型 'void' 不可分配给类型 'ObservableInput<any>' 用于 http 响应
【发布时间】:2021-12-02 14:26:06
【问题描述】:

我使用 rxjs v. 6.4.0 并尝试使用 switchMap 将我的 observable 的值传递给另一个 observable 但收到错误 Type 'void' is not assignable to type 'ObservableInput&lt;any&gt;'

 getFoodOrder(id : number): Observable<IFoodOrder> {
    let url = `${ this.baseUrl }/food_orders/${ id }`
    return this.http.get<IFoodOrder>(url)
  }

  this.foodOrderProvider.getFoodOrder(1)
    .pipe(
      switchMap(data => console.log(data)) // <-- error occurs here
    ).subscribe(() => console.log("done"))

我错过了什么? getFoodOrder 返回一个 observable。

【问题讨论】:

  • 错误是正确的。 switchMap 的投影函数总是需要返回一个 Observable(或类似 Observable 的值)。您没有返回任何内容,因此会引发错误。

标签: angular rxjs


【解决方案1】:

console.log() 不返回任何内容,因此出现错误。记录后返回数据将解决错误。

 switchMap(data =>  { console.log(data) return of(data)}); 

如果你只想记录数据,最好使用tap操作符,只看数据。

this.foodOrderProvider.getFoodOrder(1)
    .pipe(
      tap(data => console.log(data))
    ).subscribe(() => console.log("done"))

【讨论】:

  • ohhhh,我以为是输入,而不是那里的返回!现在很有意义
  • hmm.. 它仍然显示错误?那是因为它不是可观察的吗?
  • 通常它应该仍然可以工作,但是 typescript 中的 switchMap 会期望观察到,所以使用of(data) 可以做到这一点。
猜你喜欢
  • 2019-05-06
  • 2020-10-01
  • 2021-12-10
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
相关资源
最近更新 更多