2016-10-09 3 views
0

私は角度Httpについてちょっと混乱しています。観測変数の結果をクラス変数に代入したい。 subscribeの中にログインすると、クラス変数OKが出力されます。サブスクライブの外にログオンすると、空の配列が表示されます。クラス変数にどのように割り当てるのですか?Http Get - 状態を維持するには?

classes = []; 

constructor(private navController:NavController, private httpService: HttpService) { 

    this.httpService.getCalendarConfig() 
     .subscribe((data) => { 
      this.classes = data; 
      console.log("inside" + this.classes); 
     }); 

    console.log("outside" + this.classes); 
私は私のクラスに割り当てるにはどうすればよい
+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-コール) – deceze

答えて

2

。私はあなたの質問で提供したコードがコンソールログを "内側"の前に "外側"に生成すると期待します。

コードはサーバー(this.httpService.getCalendar...)への呼び出しを送信してから、続けて「外部」のconsole.logを押します。

x時間後にサーバーがデータに応答しています。この時点で、購読セクションが非同期的にヒットし、クラスがいっぱいになり(this.classes = data)、「inside」console.logが最後に表示されます。

+0

Thanks @Krenom、それは意味があります。では、その呼び出しを使用してローカルカレンダーを更新するにはどうすればよいですか?私は基本的にカレンダーを開いたときに更新したいと思う。購読とは異なるパターンを使用すべきですか? –

+0

@JohnSmith先日私の答えをチェックしてください。基本的には、コンポーネントが消費する値をプッシュする(共有)サービスがあります。http://stackoverflow.com/questions/39897670/how-can-i-create-a-variable-in-a-service-that -gets-its-data-from-a-promise-yet-i/39898499#39898499 – Krenom

1

変数

購読インサイド。 コード外のコードがその値を実行する瞬間は、サーバーから来ていません。将来から値を使用することはできません。だからあなたはそれが戻ってきてそれを使うのを待たなければなりません。 HTTPは非同期である

、それはすぐに結果を返しません:@のbasaratの答えに拡大すること

+0

ありがとう@バサラト、私のユースケースのために間違ったパターンを '購読'ですか?クラスが初期化されるとき、私はカレンダーを更新したいと思います。それは購読するのではなく、サーバーへの単純な呼び出しですか?どのように私はそれを達成するだろうか? –

+0

購読は正しいパターンです。しかし、結果がサーバーから返ってくるまで、スピナー(または他のインジケーター)を表示する必要があります。 – basarat

関連する問題