2017-04-19 10 views
0

私はJavaScriptに初めてのことではありませんが、Angular2とJavaScript ES6 Promisesについて学んでいます。私はthis tutorialに取り組んでいます。 pokedex-service.tsファイルの構築に関するセクションでは、getPokemon()機能の一部は次のようになります。.json()呼び出しに添付された.resultsプロパティとは何ですか?

getPokemon(offset: number, limit: number) { 
    return this.http.get(`${this.baseUrl}?offset=${offset}&limit=${limit}`) 
     .toPromise() 
     .then(response => response.json().results) //<- line in question 
     .then(
      // ... etc ... 
    ); 
} 

私は角度のHTTPサービスと、それはその後、(toPromise()経由)の約束に変換された観測を返すことを理解しますが、私は次の行で何が起こるのか混乱しています: .then (response => response.json().results)

具体的には、responseがPromiseのプレースホルダであり、response.json()がそのPromiseの結果をJSONオブジェクトに変換することを理解しています。しかしresponse.json()の最後には.resultsのプロパティがチェーンされていることがわかりません。

私はに対応するいずれかのAPIで、プロミスのプロパティであると思われるかもしれませんが、おそらくthe Promises APIをチェックしましたが、いずれのプロパティ(ORメソッド)も見つかりませんでした。この物件とは何ですか?それはどこから来たのですか?

さらに、単純にresponse.json()を使用した場合とどのように違うのですか?その返り値が次のthen()に渡されるのはどうでしょうか?

+0

は、私は ')それは(.json'によって返された約束の解決された結果だったと思います。 – Ouroborus

+0

誰かが彼がしてはならない約束の内部にアクセスしているように見えます。 – Bergi

答えて

0

サーバーを要求すると、応答は文字列になります。 .json()関数はここに "私は文字列レスポンスをJavascriptオブジェクトに変換します"と言っています。それがjson()の仕事です。その後、あなたのオブジェクトを取得すると、彼の財産にアクセスします。ここでは、サーバーはプロパティ結果を持つオブジェクトを返します。

return return this.http.get(`${this.baseUrl}?offset=${offset}&limit=${limit}`) 
      .map(res => res.json()) 
      .toPromise(); 

より一般的である:

getPokemon(offset: number, limit: number) { 
    return this.http.get(`${this.baseUrl}?offset=${offset}&limit=${limit}`) 
     .toPromise() 
     .then(response => response.json().results) //<- line in question 
     .then(
      (data) => { // your code } 
    ); 
} 

データは、あなたがこのように "Rxjs" ライブラリーから、オペレータのマップを使用する必要があり、 "結果" プロパティ

の内容が含まれます。このコードでは、サーバーが "results"プロパティを持つオブジェクトを返さなくても動作します。

と私は推測する(と私は)していた場合は、輸入

import 'rxjs/add/operator/toPromise'; 
import 'rxjs/add/operator/map'; 
関連する問題