gpt4 book ai didi

javascript - 通过使用 es6 获取数组实例来滞后

转载 作者:行者123 更新时间:2023-11-30 06:15:41 25 4
gpt4 key购买 nike

我在记录数组实例时得到一个空数组!

  onSelectMultipleImage = (event): Promise<any> => {
return new Promise(resolve => {
const files = <File[]>event.target.files;
let file: File;
let counter = -1;
const response = [];
while (file = files[++counter]) {
const reader: FileReader = new FileReader();
reader.onload = ((f) => {
return () => {
response.push({
file: f,
base64: reader.result
})
}
})(file);
reader.readAsDataURL(file);
console.log(counter);
if(counter == files.length -1) {
console.log('inside the while');
resolve(response);
}
}
});
};

onImagesSelect = async (event: Event) => {
this.newImages = await this.helper.onSelectMultipleImage(event) || [];
console.log(this.newImages, "Original"); // [file: File, base64: "base 64 long string..."]
console.log([...this.newImages],"instance"); // [] empty array
setTimeout(() => {console.log([...this.newImages, 'instance'])}, 2000); // [file: File, base64: "base 64 long string..."]
}

那么为什么我会得到呈现的结果?这是数组中出现的 base64 造成的吗?如果是,解决方案是什么?

最佳答案

它不会等待 reader.onload 完成。所以 resolve(response)response.push 之前被调用。

您可以创建一个 promise 来读取一个文件并使用 Promise.all 返回它们,如下面的代码。

readFile = (file: File): Promise<any> => {
return new Promise(resolve => {
const reader: FileReader = new FileReader();
reader.onload = (f) => {
resolve({
file: f,
base64: reader.result
});
};
reader.readAsDataURL(file);
})
}

onSelectMultipleImage = (event): Promise<any> => {
const files = <File[]>event.target.files;
return Promise.all(files.map(file => readFile(file)));
};

关于javascript - 通过使用 es6 获取数组实例来滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56332163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com