2016-03-19 3 views
1

http.getメソッドを私のThemeServiceから外して、できるだけ "同期"にして、呼び出しからThemeを取得した後に連続してもらいたいです。私はこれを行う方法を探し、asyncawaitを見つけました。私はこれを実装しようとしましたが、うまく動作しませんでした。私はコードが何であるか、何が実行されていないかを見ることができるように、console.log()をコードに入れました。 ThemeServiceのコールの後/には、「ASYNCファンクション」および「ASYNC後」が実行されますが、それらは実行されません。typescriptでasync/awaitを使用する方法

私がasync/awaitのtypescriptの新機能であるため、私が書いたことがひどく、あるいは私がやろうとしていることが可能かどうかはわかりません。

ngOnInit():void{ 
    let id = +this.routeParams.get('themeId'); 
    async function getTheme(){ 
     console.log("IN ASYNC FUNCTION"); 
     var val = await this.themeService.getTheme(id).subscribe((theme:Theme)=> { 
      this.theme = theme; 
      console.log("IN AWAIT FUNCTION") 
     }); 
     console.log("AFTER AWAIT"); 
     return val; 
    } 

    getTheme(); 
    console.log("AFTER ASYNC"); 
} 

答えて

3

あなたは( '取るには(1).toPromise()' の使い方に注意してください)このようにそれを持つことができます。

ngOnInit():void 
{ 
    let id = +this.routeParams.get('themeId'); 
    async function getTheme() 
    { 
     console.log("IN ASYNC FUNCTION"); 
     var val = await this.themeService.getTheme(id).take(1).toPromise(); 
     console.log("AFTER AWAIT"); 
     return val; 
    } 

    this.theme = await getTheme(); 
    console.log("AFTER ASYNC"); 
} 

またはビット短い:

class MyComponent implements OnInit 
{ 
    async ngOnInit() 
    { 
     let id = +this.routeParams.get('themeId'); 
     this.theme = await this.themeService.getTheme(id).take(1).toPromise(); 
     console.log("AFTER ASYNC"); 
    } 
} 

希望これを助けてください。

+0

私はそれを両方の方法で試しましたが、何もうまくいかなかったので、「this.theme」は価値がありませんでした。 「AFTER ASYNC」はコンソールに記録されません。私が 'getTheme()'メソッド内に 'console.log(" int method ")'を置いた場合、コンソールにそれを記録しません。 – Kupi

+0

まず、themeService.getTheme()asyncメソッドをいくつかのダミーメソッドそれは、そのgetが呼び出されたときにログに記録し、Promise.resolve()のようなものを返します。これはthemeServiceの問題ではないことを確認します。 – Amid

+0

'getTheme'の内容をコンソールで何かを記録し、Observable ではなくPromise.resolve()を返すように変更しました。しかし、私がasync/awaitの代わりに通常使うなら、getThemeメソッドは動作します。 – Kupi

関連する問題