2016-05-18 4 views
1
var final; 
final = $http.get('http://localhost:9000/therapist_data',config) 
      .success(function(response) { 
      console.log("I got the data I requested"); 
      var resdata = response; 
      console.log(resdata); 
      return resdata; 
     }); 

console.log(final); 

私は応答データを返す代わりに最終変数に格納しようとしていますが、私は約束オブジェクトを取得しています。
実際のデータを返すにはどうすればよいですか?

+0

独自のカスタムサービスを作成することができます。 –

+0

var final defined –

答えて

3

私はあなたのコードに基づいて、シリルの答えを開発しようとするでしょう。ここ

var final; 
final = $http.get('http://localhost:9000/therapist_data',config) 
     .success(function(response) { 
     console.log("I got the data I requested"); 
     var resdata = response; 
     console.log(resdata); 
     return resdata; 
    }); 

console.log(final); 

は、実行の順序である:

  1. var final
  2. $http.get('http://localhost:9000/therapist_data',config) .success();:これは、要求とレジスタがトリガされますサーバーがあなたの要求に応答したときにコールバックとして成功する関数
  3. console.log(final); - >まだ未定義です。それは応答待ちではありません。
  4. 後で...成功のあなたの機能が呼び出されます。

これは、コールバックと非同期処理の基本であり、実行されるタイミングがわからない、または少なくとも他のコードの後に​​実行されることがよくあります。 angularJSには、同期要求を行う方法がありません。成功関数でコードを移動する必要があります。

+0

すべての真実、実行の順序は非常にいい、+1! –

0

$ http.getは常に約束を返します。
あなたはこのように、あなたはsuccessコールバックの内側にそれを行う必要があります約束値を取得したい場合:

var final; 
$http.get('someUrl').success(function(response) { 
final = response; 
}); 

resDataの必要は、唯一の約束チェーンの原因となります、あなたが必要としない何かこの場合。

+0

これを試してみましたが、私が成功のファイナルを定義したとき、そのスコープはローカル成功関数にとどまりました。 –

+0

デバッグしていたときに成功関数をヒットしましたか?おそらく約束は拒否され、最終的には変更されませんでした。 – AranS

+0

コンポーネントプロパティを宣言した後、コンストラクタで非同期関数を呼び出したケースがありました。約束が返された後、プロパティに(thenを使用して)入力しました。 _final_変数が有効範​​囲にない理由はわかりません。 @Cyril Gandon? – AranS

2

ネットワークコールを行っている間は、データは非同期で戻ってきます。それはその性質であり、あなたはそれと戦うことができません。

var wrongFinal; // <-- nope, final will never get into that scope 
$http.get('http://localhost:9000/therapist_data',config) 
    .success(function(response) { 
    console.log("I got the data I requested"); 
    var goodFinal = reponse; // <-- yes, here, the data lived 
    // do something with the data here 
}); 

console.log(wrongFinal); // nop, wrong scope, no sense, data doesn't live here 

SOOOOOO、答えは質問です:

あなたがあなたのデータをどうするかをしたいですか?

宛先によって異なります。あなたは、anoherネットワークコールを行うつもりですか?ビューを更新しますか?第三者図書館に電話したいですか?

JavaScriptで非同期の性質を理解し、それを受け入れる必要があります。

+0

実際には上記のコードは別のhttp get.Itsネストされたネットワークの呼び出しの別の成功関数の内部です。 –

関連する問題