【发布时间】:2020-10-07 21:22:23
【问题描述】:
我想读取多个文件的文件内容并将内容作为数组返回。
整个过程应该等到收到所有文件内容。
我的函数只能以一个文件作为输入以某种方式工作。
一旦我向getFileContent 输入多个文件,我只会收到第一个文件的结果。
有人能告诉我我的构造中缺少什么吗?
interface FileInterface {
fileName: string;
fileContent: string | ArrayBuffer | null;
}
async function readFileAsync(file: File): Promise<string | ArrayBuffer | null> {
return new Promise((resolve, reject) => {
let fileReader: FileReader = new FileReader();
fileReader.onload = () => {
resolve(fileReader.result);
};
fileReader.onerror = reject;
fileReader.readAsArrayBuffer(file);
});
}
export async function getFileContent(
files: File[]
): Promise<Array<FileInterface>> {
const uploadedFiles: FileInterface[] = [];
for (let file of files) {
console.log(file.name);
let fileContent: ArrayBuffer = (await readFileAsync(file)) as ArrayBuffer;
uploadedFiles.push({ fileName: file.name, fileContent: null });
}
return uploadedFiles;
}
// files: File[]
const fileContents: FileInterface[] = await getFileContent(files);
【问题讨论】:
-
你能看到所有文件的文件名吗?使用你的
console.log(file.name)? -
是的,但一直只有一个名字。
-
那么可能是files只是一个文件的数组,尝试打印files.length
-
这不是问题。只要我注释掉
let fileContent: ArrayBuffer = (await readFileAsync(file)) as ArrayBuffer;行,我就会看到所有文件名。 -
有可能在await挂起期间在别处被修改过,因为在没有中断的情况下文件是完整的。
标签: javascript typescript promise async-await filereader