javascript - angularjs 1.5 中的等待功能

标签 javascript angularjs asynchronous async-await

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

我的服务正在返回 IPromise。我在 Controller 中使用它作为:

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() 将在调用 header 模型映射语句之前稍晚返回数据。

我应该如何 await(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方法定义为async:

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

并在调用 GetHeader 时使用 await:

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

关于javascript - angularjs 1.5 中的等待功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45231867/

相关文章:

javascript - 删除哈希值时是否会触发 hashchange 事件?

javascript - 过滤搜索 AngularJS

javascript - 将 javascript 变量传递给 angularjs 范围

javascript - 用于隐藏负值的自定义过滤器

ios - 用户允许共享并找到位置后继续处理

javascript - 在字符串中的任意位置追加单词

javascript - 为什么点击按钮后页面会不断刷新? (JavaScript 和 HTML)

javascript - 如何用分号分隔逗号、分号和逗号分隔的短语?

javascript - angular.forEach 和对象

javascript - 异步: Connecting to MongoDB after the server started