我正在尝试将解析value
的array
保存到全局array
中。但全局array
向我显示undefined
dataUrl: string = "assets/data.csv";
private data:[];
dataInit(){
this.papa.parse(this.dataUrl, {
download: true,
complete: (result) => {
// result.data.push(this.data);
this.data = result.data
// console.log(result.data, "inside parser");
// console.log(this.data, "global array");
}
});
}
ngOnInit() {
this.dataInit();
console.log(this.data, "inside onInit");
}
控制台
undefined "inside onInit"
有两个原因-
private data: Array<any>= [];
这样初始化变量数据将在complete callback
内部可用。因此,console.log(this.data)
那边。
原因:
complete
是一种异步工作的回调方法。
dataUrl: string = "assets/data.csv";
data = [];
dataInit(){
this.papa.parse(this.dataUrl, {
download: true,
complete: (result) => {
// result.data.push(this.data);
this.data = result.data
console.log(this.data);
}
});
}
ngOnInit() {
this.dataInit();
}
将数据属性的初始化更改为类似
private data = [];
或
private data: Array<T> = []
而不是T相应地键入数组
将控制台日志放入异步代码的完整功能内。
由于papa.parse
下载代码是异步的,因此控制台控制台日志将显示data
的初始值,因为结果尚未准备好。
因为this.papa.parse函数是异步的,所以在调用dataInit之后无法立即获取数据变量的值...最好在完整的回调中进行]]
dataUrl: string = "assets/data.csv";
private data:[];
dataInit() {
this.papa.parse(this.dataUrl, {
download: true,
complete: (result) => {
this.data = result.data
this.toDo();
}
});
}
ngOnInit() {
this.dataInit();
}
toDo(){
console.log(this.data, "global array");
}