2017-07-22 3 views
0

Observablesのハングアップを取得しようとしていますが、時には何も失われません。オブザーバブルとレスポンスデータタイプ

たちは非同期でJSONデータを取得するためのgetDataに加入すると仮定します

this.getData(id) 
    .subscribe(res => { 
     console.log(data.items[0]) 
     // more data processing 
    }) 

これは動作しますが、.subscribe内の応答データを処理することは楽しい見えません。 VARのデータが 'は初期型を持っていないので

let data; 
this.getData(id) 
     .subscribe(res => data = res) 
console.log(data.items[0]) 
// more data processing 

しかし、このケースでは、我々は、エラーを取得します。varへの応答を割り当てると、移動するための方法のように思えます。

TypeError: Cannot read property 'items' of undefined

json応答用のインターフェイスを作成すると愚かに聞こえます。私は何が欠けていますか?

また、コールバック関数を作成すると、1つの関数であるはずのものを処理するために2つの関数が必要になるため、冗長なように見えます。

答えて

0

since var 'data' has no initial type.

データundefinedであるため、エラーがある号。 TypeScriptは、dataが初期化されていないことを確認するのに十分スマートですhttps://basarat.gitbooks.io/typescript/content/docs/javascript/recap.html。コードが実行される順序は以下の通りである:

let data; // 1 
this.getData(id) 
     .subscribe(res => data = res) // 3! 
console.log(data.items[0]) // 2 

もっと

のJavaScript /活字体で非同期プログラミングを検索してください。基本的には、一度だけデータを使用することができますsubscribeが呼び出されます。

+0

大丈夫、わかりました。もしそれが意味があれば、私はそれを構造化して、複数の観測データからデータを処理する必要があります。 – iamart

+0

これらの操作はhttps://github.com/ReactiveX/RxJava/wiki/Combining-Observables basarat

+0

を使用していますので、匿名関数を持つコールバックだけでなく、observablesを使用する利点は何ですか? 'func(_、{})' – iamart

関連する問題