2016-07-01 6 views
1

私はAngular2でgithub apiにリクエストを作成しようとしています。データはjson形式であり、jsonオブジェクト。角2 - HTTPをAPIの残りの部分に保存してjsonオブジェクトに保存する方法

Angular2ドキュメントの

getHeroes(): Observable<Hero[]> { 
    return this.http.get(this.heroesUrl) 
        .map(this.extractData) 
        .catch(this.handleError); 

ヒーロー[]変数は、どのようにデータを取得する観測関数を作成することができ、それはIDと名前を持つドキュメントのようにAPIの定義できないのでそれをオブジェクトに格納します。

角1.5では、私はこの

search (term: string) { 

    let gitUrl = 'https://api.github.com/search/repositories'; 
    let params = new URLSearchParams(); 
    params.set('q', term); 

    let result = this.http 
       .get(gitUrl, { search: params }) 
       .map(request => request.json()); 
       console.log(result); 
       return result; 
    } 

のようにそれをやっているが、コンソールに、私は

「観察可能な{_isScalarを取得しています。この

var urlBase = 'https://api.github.com/search/repositories?q='; 
    var SearchOp = {}; 
    SearchOp.getRepositories = function (search) { 
     SearchOp = $http.get(urlBase+ search +'&sort=star&order=desc&per_page=5') 
     return SearchOp; 
    }; 

のようにそれをやりました:false、出典:Observable、演算子:MapOperator} '

正しくない結果

+0

を到着したときにthis.dataへの応答は、「ヒーロー[]変数は、APIのために定義することはできませんが、」何を意味するの割り当て?何が問題ですか? 'extractData'はどのように見えますか? –

+0

これは角度2の塗りつぶしで与えられます – Roy

+0

うまく見えるので、何が問題なのですか? –

答えて

2

http.get()呼び出しは非同期です。つまり、request => request.jsonは、サーバからの応答が到着したときに呼び出されるmap(...)にコールバックが追加されたことを意味します。 HTTPコールは、後で実行するためにブラウザイベントキューにエンキューされ、ただちにsearchメソッドでコードを処理し続けます。

したがって、console.log(result)は、サーバーへの呼び出しが送信される前であっても呼び出されます。

あなたは、データが到着したときにコードを実行したい場合は、機能が完了すると、resultはまだ利用できないので、あなたはまた、単にresultを返すことができませんmap(...)

return this.http 
      .get(gitUrl, { search: params }) 
      .map(request => { 
      request.json() 
      console.log(result); 
      // return result; // doesn't work 
      }); 

内に移動します。

上記のコードresultは、サブスクライブ可能な番号がObservableです。

たとえば、この行は、それが

this.search(term).subscribe(data => this.data = data); 
関連する問題