我是angularjs的新手,只有1.5周的经验。

我的服务正在返回IPromise。我在控制器中使用它为:

private GetHeader(): void {
        this._SolutionExplorerHeaderData = this.globalShellService.SolutionExplorerHeaderData;
        this.globalShellService.retrieveHeaderData().then(
            (response: Models.SolutionExplorerHeader) => {
                this._SolutionExplorerHeaderData = response;
            });
}


我这样调用此方法:

private InitComponents(): void {
        let statusBar = new LayoutModels.StatusBar(Designer.DesignerTitleKey);
        let designerShell = this.GetDesignerShell();
        let globalCommadBarHandler = this.globalCommandBarService;
        this.GetHeader();
        this.headerModel = new LayoutManager.Models.HeaderModel(this._SolutionExplorerHeaderData.SolutionType,
            this._SolutionExplorerHeaderData.Publisher,
            this._SolutionExplorerHeaderData.InstalledOn,
            this._SolutionExplorerHeaderData.ModifiedOn,
            this._SolutionExplorerHeaderData.LastSaved,
            this._SolutionExplorerHeaderData.LastPublished);
        this.layoutModel = new LayoutManager.Models.LayoutModel(Designer.DesignerName,
            designerShell, statusBar, globalCommadBarHandler, this.headerModel);
    }


现在的问题是GetHeader()中的.then()将在调用该头模型映射语句之前稍晚返回数据。

我应该如何等待(C#)@ this.GetHeader()语句,以便在该语句处暂停执行。

最佳答案

确保您的GetHeader函数返回一个Promise,因此从您进行的then调用中返回结果:

return this.globalShellService.retrieveHeaderData().then( //... etc
//^^^^


然后在代码的第二部分,继续使用then

this.GetHeader().then(_ => {
//               ^^^^
    this.headerModel = new LayoutManager.Models.HeaderModel(// ...etc
    // ...
});


另外,如果您支持async / await,则可以将InitComponents方法定义为异步:

private async InitComponents(): void { // ...etc
//      ^^^^^


并在呼叫await时使用GetHeader

await this.GetHeader();
//^^^
this.headerModel = new LayoutManager.Models.HeaderModel(// ...etc
    // ...

09-25 17:31