rxjs , switchMap ,间隔,提供了 'undefined' 需要流的地方

rxjs , switchMap ,interval, provided 'undefined' where a stream was expected

正在尝试从服务器获取数据,每 10 秒间隔一次服务。 如果返回价格,则停止间隔。代码如下:

但我收到错误消息:

ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.

代码:

public Respond() {

this.dataService.WaitingForServiceRespond()
  .pipe((
    debounceTime(2000),
    switchMap((r: any) => {
      if (!r.price) {
        setInterval(() => {
          return this.Respond();
        }, 10000)
      } else {

        this.dataService.user.payment = r;
        console.log('price returned', r);
        return ''
      }
    })
  ))
  .subscribe(e => {
    console.log(e)
  })

}

问题出在您的 switchMap 上。它期望 return 一个流。你 return 什么都没有,因为你使用 setInterval。您可以 return 一个 Observable 通过 returning interval() of rxjs 而不是调用 setInterval().

import { interval } from 'rxjs';
...

public Respond() {

this.dataService.WaitingForServiceRespond()
  .pipe((
    debounceTime(2000),
    switchMap((r: any) => {
      if (!r.price) {

        return interval(10000).pipe(tap(() => this.Respond()))

      } else {

        this.dataService.user.payment = r;
        console.log('price returned', r);
        return of('')
      }
    })
  ))
  .subscribe(e => {
    console.log(e)
  })
}