我有一个Service文件,我试图设置为一个observable,我想要订阅它的组件。但它不起作用,我做错了什么?
服务:Tracker.service.ts
getAllCoins(): (Observable<string>) { //<Response> {
return allC
.map(res => JSON.stringify(res))
//.do(data => console.log('coins ' + JSON.stringify(data)))
//.catch(this.handleError)
}
我的功能,其中这个观察不喜欢
以前我使用了一个真实的URL,我使用了http.get FYI,但是它的工作方式(编码方式不同)
我的JSON数据:
const allC =
[{
"BTC": {
"USD": 3349.1
},
"ETH": {
"USD": 296.3
},
"LTC": {
"USD": 47.56
},
"EOS": {
"USD": 1.83
},
"DASH": {
"USD": 195.83
}
}]
接下来我设置组件并尝试订阅它。
组件文件
coinsList = [];
constructor(
private coinService: TrackerService
) {
this.coinService.getAllCoins()
.subscribe(
(data) => {
for (let key in data) {
this.coinsList.push({ coinName: key, price: data[key].USD});
}
},
(error) => console.log('error :' + error)
);
}
答案 0 :(得分:2)
以前我使用的是真实的URL,而且我使用的是http.get FYI,但它的工作方式(编码方式不同)
这是因为http.get
将返回一个Observable。
Array.map
与Observable.map
运算符不同。
您应首先使用Observable.of(arr)
提供Observable。
Observable.of(allC)
答案 1 :(得分:0)
彭吉是对的。我不想偷他的雷声,但我会像他建议的那样,但后来(Observable<string>)
(Observable<Response>)
更改为
getAllCoins(): (Observable<Response>) {
return Observable.of(allC)
.map(res => JSON.stringify(res))
//.do(data => console.log('coins ' + JSON.stringify(data)))
//.catch(this.handleError)
}