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)
})
}
正在尝试从服务器获取数据,每 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)
})
}