Return 来自 FileReader onload 函数内部的布尔值,使用 angular 4
Return a boolean value from inside the FileReader onload function using angular 4
我正在使用 FileReader 解析我的 csv 数据并仅获取 headers。
我需要检查 headers 并根据 return 值进一步执行。
private checkIfValidFile(file){
var isValidFile = false;
var fileContent = new FileReader();
fileContent.readAsText(file);
fileContent.onload = () => {
let text = fileContent.result;
var data = text.split("\n");
var headers = data[0].split(",");
//fileHeaders = headers;
console.log(headers);
if (headers.indexOf('"File Name"') > -1) {
isValidFile = true;
}
};
return isValidFile
}
private uploadFiles(files: any) {
for (let index = 0; index < files.length; index++) {
var isValidFile = this.checkIfValidFile(files[index]);
if(isValidFile){
//Execute some lines
}
}
}
但是 return 值在加载之前得到 returned。我该怎么做?
使用 "Promise" 实现这样的目标:
private checkIfValidFile(file):Promise<boolean>{
var fileContent = new FileReader();
fileContent.readAsText(file);
return new Promise((resolve,reject)=>{
fileContent.onload = () => {
let text = fileContent.result;
var data = text.split("\n");
var headers = data[0].split(",");
//fileHeaders = headers;
console.log(headers);
if (headers.indexOf('"File Name"') > -1) {
resolve(true);
}
resolve(false);
};
});
}
private uploadFiles(files: any) {
for (let index = 0; index < files.length; index++) {
this.checkIfValidFile(files[index]).then((isValidFile)=>{
if(isValidFile){
//Execute some lines
}
});
}
}
使用 promise 怎么样?
喜欢:
private checkIfValidFile(file): Promise<boolean> {
return new Promise((resolve, reject) => { // RETURN PROMISE FFORM YOUR FUNC
try {
var isValidFile = false;
var fileContent = new FileReader();
fileContent.readAsText(file);
fileContent.onload = () => {
let text = fileContent.result;
var data = text.split("\n");
var headers = data[0].split(",");
//fileHeaders = headers;
console.log(headers);
if (headers.indexOf('"File Name"') > -1) {
isValidFile = true;
resolve(isValidFile);
}
};
} catch (error) {
reject(error);
}
});
}
private uploadFiles(files: any) {
for (let index = 0; index < files.length; index++) {
this.checkIfValidFile(files[index]).then((isValidFile) => {
if (isValidFile) {
//Execute some lines
}
});
}
}
我正在使用 FileReader 解析我的 csv 数据并仅获取 headers。 我需要检查 headers 并根据 return 值进一步执行。
private checkIfValidFile(file){
var isValidFile = false;
var fileContent = new FileReader();
fileContent.readAsText(file);
fileContent.onload = () => {
let text = fileContent.result;
var data = text.split("\n");
var headers = data[0].split(",");
//fileHeaders = headers;
console.log(headers);
if (headers.indexOf('"File Name"') > -1) {
isValidFile = true;
}
};
return isValidFile
}
private uploadFiles(files: any) {
for (let index = 0; index < files.length; index++) {
var isValidFile = this.checkIfValidFile(files[index]);
if(isValidFile){
//Execute some lines
}
}
}
但是 return 值在加载之前得到 returned。我该怎么做?
使用 "Promise" 实现这样的目标:
private checkIfValidFile(file):Promise<boolean>{
var fileContent = new FileReader();
fileContent.readAsText(file);
return new Promise((resolve,reject)=>{
fileContent.onload = () => {
let text = fileContent.result;
var data = text.split("\n");
var headers = data[0].split(",");
//fileHeaders = headers;
console.log(headers);
if (headers.indexOf('"File Name"') > -1) {
resolve(true);
}
resolve(false);
};
});
}
private uploadFiles(files: any) {
for (let index = 0; index < files.length; index++) {
this.checkIfValidFile(files[index]).then((isValidFile)=>{
if(isValidFile){
//Execute some lines
}
});
}
}
使用 promise 怎么样?
喜欢:
private checkIfValidFile(file): Promise<boolean> {
return new Promise((resolve, reject) => { // RETURN PROMISE FFORM YOUR FUNC
try {
var isValidFile = false;
var fileContent = new FileReader();
fileContent.readAsText(file);
fileContent.onload = () => {
let text = fileContent.result;
var data = text.split("\n");
var headers = data[0].split(",");
//fileHeaders = headers;
console.log(headers);
if (headers.indexOf('"File Name"') > -1) {
isValidFile = true;
resolve(isValidFile);
}
};
} catch (error) {
reject(error);
}
});
}
private uploadFiles(files: any) {
for (let index = 0; index < files.length; index++) {
this.checkIfValidFile(files[index]).then((isValidFile) => {
if (isValidFile) {
//Execute some lines
}
});
}
}