我想从我的http.get
调用ThemeService
方法,并将其设为"同步"尽可能使它在从呼叫中获得Theme
后继续。我搜索了如何执行此操作并偶然发现async
和await
。我试图实现这一点,但它没有成功。我在代码中放了一些console.log()
,这样我就可以看到什么是什么,什么没有执行。 " IN ASYNC FUNCTION"和#34; ASYNC"在我ThemeService
的电话中/之后执行但不执行。
因为我不熟悉打字稿中的async/await
功能,所以我不知道我写的是不是很糟糕,或者我试图做的事情是否可行。
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");
}
答案 0 :(得分:3)
你可以这样(注意使用' take(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");
}
}
希望这有帮助。