需要时数据未准备好

时间:2018-11-13 20:51:42

标签: angular typescript

我需要先从服务器加载一些数据,然后再进行进一步处理。所以我有这个功能:

async load() {
    await this.reloadClients()
    this.findTimeSheets();
}

findTimeSheets() {
    for (const client of this.clients) {
        console.log('Client: ' + client.lastName);
    }      
}

单击组件上的按钮时将调用此函数。

我需要函数this.timeSheets等待,直到this.reloadClients完成处理,因此数据已准备就绪。这是重新加载功能,它应该加载客户端列表并将其存储在this.clients中:

reloadClients() {
    this.clientService.search({
        page: '0',
        query: 'assigner.id:' + this.selectedAssigner.id,
        size: '250',
        sort: ''})
       .subscribe((res: HttpResponse<Client[]>) => { this.clients = res.body; this.init(res.body); }, (res: HttpErrorResponse) => this.onError(res.message));
}

现在发生的是,我需要单击两次按钮以获取正确的数据。因此,findTimeSheets()中的循环在第二次单击(将数据打印到控制台)之后起作用。

我的方法是使用await,但这不起作用。

由于我是Angular的新手,因此需要一些帮助来解决此问题。

1 个答案:

答案 0 :(得分:0)

您有await this.reloadClients(),但是功能reloadClients不是async。因此,等待是没有用的。

修复

使reloadClients异步,例如

async reloadClients() {
    await this.clientService.search({
        page: '0',
        query: 'assigner.id:' + this.selectedAssigner.id,
        size: '250',
        sort: ''})
       .subscribe((res: HttpResponse<Client[]>) => { this.clients = res.body; this.init(res.body); }, (res: HttpErrorResponse) => this.onError(res.message))
       .toPromise();
}