javascript - 如何正确分配订阅中的字段?
问题描述
我正在用 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
,结果发现数组是空的,我不明白是什么这有关系,有人可以建议吗?
附言
我认为这是因为响应来晚于我有时间使用标签,我怎样才能使它们同步?
解决方案
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);
}
推荐阅读
- python - 比较来自两个不同数据帧的列元素,其中条件基于 pandas 中的函数
- mysql - 如何避免 GROUP_CONCAT() 行乘以我的 SUM()
- java - 从 Imageview 中的图像中获取特定颜色的所有像素
- ios - 'application:handleActionWithIdentifier:forRemoteNotification:completionHandler 实现中的参数类型冲突
- javascript - 循环遍历每个项目上的 JS 对象和函数
- odoo-8 - 如何在odoo模式中添加编辑和删除选项?
- python - 比较python json中的2个时间戳
- shell - 如何使用 shell 脚本运行带有标头的 curl 命令
- r - 将函数列表应用于矩阵并在 R 中返回一个矩阵作为结果
- javascript - 为什么即使在控制台语句之后更新了数组,console.log 也会打印数组?