2016-10-18 7 views
2

このpostメソッドは、angular2で使用しています。このajax呼び出しでは、postメソッドは応答を待っていません。応答が受け取られるまでjavascriptで非同期を保持するためにobservableを使用する方法を言うことができます。observableまたはangular2の約束

this.http.post("http://jsonplaceholder.typicode.com/posts",body,options) 
.map((res:Response) => res.json()) 
.subscribe(
    data => { console.log("data is",data)}, 
    err => console.error(err), 
    () => console.log('done') 
); 
+0

可能な重複します。http:ハンドラ、そうなどを引き起こすサブスクライブの内側にあなたがやるべきことは、単純にデータが準備さに依存し、すべてのコードを入れています://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

答えて

1

応答が

data => { console.log("data is",data)}, 

到着実行されます。

データが到着したとき、あなたは他の以上のコードが実行されるようにしたい場合は、{ }内部でこのコードを追加します(代わりに、またはconsole.log(...)に加えて)

非同期実行が動作し、他の方法がない方法です。

let myData = null; 
this.http.post("http://jsonplaceholder.typicode.com/posts",body,options) 
.map((res:Response) => res.json()) 
.subscribe(
    data => { 
     myData = data; 
     console.log("data is",data); 
    }, 
    err => console.error(err), 
    () => console.log('done') 
); 

console.log("Log the data again", myData); 

あなたがよく知っているように観察可能で、おそらくまだ結果を取得していないので、第二のロギングがnullのログに記録します。

+0

私はこの@Gunterを要求していません。 angular1では、$ qは次の行の実行を止めるために使われます。angle2でobservablesを使う方法を尋ねています。 –

+0

私は '$ q'を使っていませんが、あなたはそれが必要なのか分かりません。のためのオブザーバブル。あなたが解決しようとする実際の問題は何ですか? –

+1

@NaveenKumar '$ q'は' async-await'を使っていない限りjavascriptの実行を止めません。実行すると停止します。 –

0

が、これはあなたのコードであると言うことができます。

let myData = null; 
this.http.post("http://jsonplaceholder.typicode.com/posts",body,options) 
.map((res:Response) => res.json()) 
.subscribe(
    data => { 
     myData = data; 
     console.log("data is",data); 
     console.log("Log the data again", myData); // <-- 
    }, 
    err => console.error(err), 
    () => console.log('done') 
); 
[?私は非同期呼び出しからの応答を返すにはどうすればよい](の
関連する問題