首页 > 解决方案 > 如何正确分配订阅中的字段?

问题描述

我正在用 Angular 编写一个项目,但在我看来,我的问题与此无关。我按顺序发送请求并尝试将响应值分配给双数组private labels: any [][] = [[]];

getInfo(url: string, command: string, accessToken: string, companyToken: string, size: number) {
    return this.httpClient.post(url,
        JSON.stringify({
            'cmd': 'getInfo',
            'command': command,
            'date': this.getDate(),
            'accessToken': accessToken,
            'companyToken': companyToken,
            'size': size
        })
    );
}

  getData() {
    for (let i = 0; i < this.commands.length; i++) {
        let labelsArr: string[] = [];
        let dataArr: string[] = [];
        this.getInfo(this.url, this.commands[i], this.accessToken, this.companyToken, 12)
            .subscribe(
                response => {
                    for (let j = 0; j < Object.keys(response).length; j++) {
                            labelsArr[j] = Object.entries(response)[j][1][0];
                            dataArr[j] = Object.entries(response)[j][1][1];
                    }
                    this.labels[i] = labelsArr;
                    //not empty
                    console.log(this.labels);

                    this.AllData[i] = dataArr;
                });
    }
    //empty
    console.log(this.labels);

}

在getData()中我输出了结果数组,事实是输出到的时候不为空subscribe,但是如果我尝试在外面显示字段的值subscribe,结果发现数组是空的,我不明白是什么这有关系,有人可以建议吗?

附言

我认为这是因为响应来晚于我有时间使用标签,我怎样才能使它们同步?

标签: javascriptangulartypescriptweb

解决方案


ok it worked

async getData() {

    for (let i = 0; i < this.commands.length; i++) {
        let labelsArr: string[] = [];
        let dataArr: string[] = [];
        await this.getInfo(this.url, this.commands[i], this.accessToken, this.companyToken, 12)
            .toPromise().then(
                response => {
                    for (let j = 0; j < Object.keys(response).length; j++) {
                            labelsArr[j] = Object.entries(response)[j][1][0];
                            dataArr[j] = Object.entries(response)[j][1][1];
                    }
                    this.labels[i] = labelsArr;
                    this.AllData[i] = dataArr;
                });
    }
    //
   console.log(this.labels);

}

推荐阅读