Angular 2/4尝试通过调用javascript数组对象来获取Observable - 要订阅

时间:2017-08-28 03:33:33

标签: javascript json angular observable

我有一个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)

        );
}

2 个答案:

答案 0 :(得分:2)

  

以前我使用的是真实的URL,而且我使用的是http.get FYI,但它的工作方式(编码方式不同)

这是因为http.get将返回一个Observable。

Array.mapObservable.map运算符不同。

  • Array.map将返回一个数组,请参阅 here
  • Observable.map将返回一个Observable。

您应首先使用Observable.of(arr)提供Observable。

Observable.of(allC)

答案 1 :(得分:0)

彭吉是对的。我不想偷他的雷声,但我会像他建议的那样,但后来(Observable<string>) (Observable<Response>)

  1. 您的组件文件看起来不错
  2. 使用Observable.of(allC)
  3. 更改为

    getAllCoins(): (Observable<Response>) {   
        return Observable.of(allC)
           .map(res => JSON.stringify(res))
           //.do(data => console.log('coins ' + JSON.stringify(data)))
           //.catch(this.handleError)
    

    }