如何在typescript中使用async / await

时间:2016-03-19 02:23:28

标签: asynchronous typescript async-await angular ecmascript-7

我想从我的http.get调用ThemeService方法,并将其设为"同步"尽可能使它在从呼叫中获得Theme后继续。我搜索了如何执行此操作并偶然发现asyncawait。我试图实现这一点,但它没有成功。我在代码中放了一些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");
}

1 个答案:

答案 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");
    }
}

希望这有帮助。