是否有任何解决方法可以从 readCsv() 方法返回 res 的值而不是 undefined?
is there any workaround for returning the value of res from readCsv() method instead of undefined?
场景是我有文件上传器,它在有文件后接受 .json,.csv 文件,如果我点击上传按钮,然后 homeComponent 调用服务 dataparser,它有两个功能readJson readCsv, 和 readcsv
功能
return 观察另一个 returns 数组,这很简单我必须调用两个函数
在 if else 上处理 HomeComponent 上的订阅者和数组
但是等等,我不想在组件级别处理这些复杂性,所以我只想 return 主页组件页面上的数据数组,所以,我已经在服务中处理了这些,但可以观察到创建问题
**dataparser.service.ts having threee methods**
async uploadDocument() {
const type = this.checkType();
if(!type) return;
let m = type == "csv" ? await this.readCsv() : await this.readJson();
if(m){
console.log(m);
return m;
}
console.log(" m is empty");
}
readJson 方法是 returning 对象数组,如果文件类型是 json,m 不为空,它 returning m 到 homeComponent 上的调用函数
private readJson() {
return new Promise((resolve,reject) =>{
const fr: FileReader = new FileReader();
fr.readAsText(this.file);
fr.onerror = () =>{
fr.abort();
reject(new DOMException("Problem parsing input file."));
}
fr.onload = () =>{
resolve(JSON.parse(fr.result as string));
}})
}
readCsv 方法是 returning empty varaiable(res) due to subscribe method 是否有任何变通方法,通过它我可以从 readCsv 函数中获取 res 阀并且 我不想订阅这个任何地方的方法,因为我不想在 homeComponent 页面上处理这两个结果,那么我怎样才能从 readCsv
中获取这个 res varaible 的值
private async readCsv() {
let res: any[];
this.ngxCsvParser.parse(this.file, { header: this.header, delimiter: ',' })
.pipe().subscribe((result: Array<any>) => {
// console.log('Result', result);
res = result;
}, (error: NgxCSVParserError) => {
console.log('Error', error);
});
if(res)
{
console.log(" i got m");
return res;
}
}
您不能直接等待 Observables,但是,您可以 await
Promise。您可以简单地在 observables 订阅上使用 .toPromise()
方法。考虑以下:
const date = await dateSubscription.toPromise();
private async readCsv() {
let res: any[];
res= await this.ngxCsvParser.
parse(this.file, { header: this.header, delimiter: ',' }).toPromise()
if(res)
{
console.log(" i got m");
return res;
}
}
场景是我有文件上传器,它在有文件后接受 .json,.csv 文件,如果我点击上传按钮,然后 homeComponent 调用服务 dataparser,它有两个功能readJson readCsv, 和 readcsv
功能
return 观察另一个 returns 数组,这很简单我必须调用两个函数
在 if else 上处理 HomeComponent 上的订阅者和数组
但是等等,我不想在组件级别处理这些复杂性,所以我只想 return 主页组件页面上的数据数组,所以,我已经在服务中处理了这些,但可以观察到创建问题
**dataparser.service.ts having threee methods**
async uploadDocument() {
const type = this.checkType();
if(!type) return;
let m = type == "csv" ? await this.readCsv() : await this.readJson();
if(m){
console.log(m);
return m;
}
console.log(" m is empty");
}
readJson 方法是 returning 对象数组,如果文件类型是 json,m 不为空,它 returning m 到 homeComponent 上的调用函数
private readJson() {
return new Promise((resolve,reject) =>{
const fr: FileReader = new FileReader();
fr.readAsText(this.file);
fr.onerror = () =>{
fr.abort();
reject(new DOMException("Problem parsing input file."));
}
fr.onload = () =>{
resolve(JSON.parse(fr.result as string));
}})
}
readCsv 方法是 returning empty varaiable(res) due to subscribe method 是否有任何变通方法,通过它我可以从 readCsv 函数中获取 res 阀并且 我不想订阅这个任何地方的方法,因为我不想在 homeComponent 页面上处理这两个结果,那么我怎样才能从 readCsv
中获取这个 res varaible 的值private async readCsv() {
let res: any[];
this.ngxCsvParser.parse(this.file, { header: this.header, delimiter: ',' })
.pipe().subscribe((result: Array<any>) => {
// console.log('Result', result);
res = result;
}, (error: NgxCSVParserError) => {
console.log('Error', error);
});
if(res)
{
console.log(" i got m");
return res;
}
}
您不能直接等待 Observables,但是,您可以 await
Promise。您可以简单地在 observables 订阅上使用 .toPromise()
方法。考虑以下:
const date = await dateSubscription.toPromise();
private async readCsv() {
let res: any[];
res= await this.ngxCsvParser.
parse(this.file, { header: this.header, delimiter: ',' }).toPromise()
if(res)
{
console.log(" i got m");
return res;
}
}