2016-12-09 3 views
0

今、JSONデータを返す2つの関数があります。Sychronous JsonとAsychonrous Jsonのリターン

searchAjax(url: any): any 
{ 
    let new_data: any; 
    return $.ajax({ 
     url: url, 
     type: 'post', 
     dataType: "json", 
     async: false 

    }).responseText; 
} 

search(): Promise<any> 
{ 
    return this.http.get('app/php/search.php') 
     .toPromise() 
     .then(response => { 
      //console.log("search"); 
      console.log(response.json()); 
      response.json(); 
      }) 
     .catch(this.handleError); 
} 

は今searchAjaxは正しく私にJSONデータを返しますが、searchはちょうどconsole.log(respon.json())が実際に正しいJSONオブジェクトを印刷していても、私はnullを返しながら、それは、同期です。

JSONデータを非同期的に取得する方法があるのか​​、データを同期的に取得するだけで十分なのか疑問に思っていました。

+2

あなたは* *同期のAjaxを使用することはありません。この機能が存在しないことを忘れてください。 – Tomalak

+0

トマラクが言ったこと。同期は一般的に最後の手段とみなされます。つまり、ユーザーが何もできないようにブラウザをロックし、アニメーションは停止し、物事をクリックできません。それを使う理由はほとんどありません。 – ADyson

答えて

1

プロミスハンドラの結果は、最終的に返されるものです。あなたのコードは何も返しませんでした。

search(): Promise<any> 
{ 
    return this.http.get('app/php/search.php') 
     .toPromise() 
     .then(response => { 
      return response.json(); 
     // ^^^^^^ 
     }) 
     .catch(this.handleError); 
} 

または、略して(ここでreturnは暗黙的ですが、あなたはそれがあることを心に留めておく必要があります):

search(): Promise<any> 
{ 
    return this.http.get('app/php/search.php') 
     .toPromise() 
     .then(response => response.json()) 
     .catch(this.handleError); 
} 
+0

もちろん吹く。私は前に底を持っていましたが、ある時点でそれはまだヌルを返していました(私は 'おそらく' json()データでした)。とにかく 'json()。data 'は何を返しますか?あなたが知っていれば。私は角度でそれを見た 'json()。Hero []'としてのデータ –

+0

'' json()。data'があなたの場合には何も分からない。ブレークポイントを設定して調べる。 – Tomalak

関連する問題