我正在尝试使用间隔函数每 X 秒执行一次服务方法,但它不起作用。
服务方式为:
getCryptocurrencyInfoBasic(): Observable<Asset>[]{
this.cryptoinfo = [];
this.cryptoinfo.push(this.http.get<Asset>(this.btcurl));
this.cryptoinfo.push(this.http.get<Asset>(this.ethurl));
this.cryptoinfo.push(this.http.get<Asset>(this.ltcurl));
return this.cryptoinfo;
}
现在我正在这样做:
info = interval(1000).pipe(
switchMap((i) => this.cryptoService.getCryptocurrencyInfoBasic()[i]),
map(res => {res; console.log(res);}));
它正在打印数组的每个元素(通过控制台(,但随后它向我显示此错误:
类型错误:您在需要流的位置提供了"未定义"。您可以提供可观察、承诺、数组或可迭代。
如何获取具有 3 个 http 可观察量的数组的信息变量以将其发送到 HTML?
提前感谢!
您正在从getCryptocurrencyInfoBasic
方法返回一个数组。
可观察运算符map
需要可观察输入。同样,switchMap
运算符接受一个可观察的输入并期望一个可观察的返回值(我很惊讶你的 Typescript 编译器或 Intellisense 还没有对你大喊大叫,哈哈(。
您需要修改getCryptocurrencyInfoBasic
以返回可观察量。最懒惰的方法是return Observabke.of(this.cryptoinfo);
,但可观察物还有很多其他机会在这里大放异彩。
例如,您可以将cryptoInfo
更改为Subject
并使用next
通过它流式传输新值,或者您可以使用flatMap
或mergeMap
将三个http.get
展平为cryptoInfo
。