【发布时间】:2021-05-02 12:06:45
【问题描述】:
我希望用户上传多个图像文件,应用程序读取所有图像文件并推送到一个数组中,当全部完成然后lastStep()
<input type="file" (change) = "fileChangedEvent($event);" multiple/>
fileChangedEvent(event: any): void
{
for (let f of event.target.files)
{
var reader = new FileReader();
reader.readAsDataURL(f);
reader.onload= (event) => {this.arrayThumbnail.push(event.target.result);};
}
// when all done
lastStep(); // work on arrayThumbnail[]
}
但是lastStep() 总是在for ... of 循环之前运行,导致它在一个空的arrayThumbnail[] 上运行。关注async/await 会产生相同的结果:
fileChangedEvent(event: any): void
{
async() => {
for (let f of event.target.files)
{
var reader = new FileReader();
await reader.readAsDataURL(f);
await reader.onload= (event) => {this.arrayThumbnail.push(event.target.result);};
}
// when all done
lastStep(); // work on arrayThumbnail[]
}
}
显式Promise 也不起作用:
myPromise(fs: any): Promise<number>
{
var bogus = new Promise<number>((resolve, reject) =>
{
for (let f of fs)
{
var reader = new FileReader();
reader.readAsDataURL(f);
reader.onload= (event) => {this.arrayThumbnail.push(event.target.result);};
};
resolve(1);
})
return bogus;
}
fileChangedEvent(event: any): void
{
this.myPromise(event.target.files).then(
x=>
{
lastStep();
});
}
【问题讨论】:
标签: typescript async-await promise