【发布时间】:2019-04-29 11:44:31
【问题描述】:
我正在尝试学习正确使用异步等待,但我对此感到有些困惑。
在 sn-ps 中,我正在尝试构建一个对象数组,其中包含我在组件中上传的文件所需的信息。问题是 this.fileInfo 中的对象并没有完全等待返回编码图像的承诺,而是在我 console.log this.fileInfo 时返回此输出:
如您所见,关键图像是一个 ZoneAwarePromise,其值未定义。你能帮我解决这个问题吗?
函数构建()
async build(e) {
let files = e.target.files;
this.j = Array.from(files);
this.fileInfo = await this.j.reduce((acc, cur) => [
...acc, {
name: cur.name.replace(/^.*\\/, ""),
sizeunit: this.getSize(cur.size),
extention: cur.name.split(/\.(?=[^\.]+$)/).slice(-1).pop().toString(),
image: this.previewFile(cur)
}
], [])
console.log(await this.fileInfo);
}
承诺
async previewFile(file) {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
return new Promise((res) => {
res(reader.result)
}).then( res => res);
};
}
【问题讨论】:
-
但是 .then 附加到承诺不应该返回值?
-
我也试过 image: await this.previewFile(cur) 但它返回错误 ''TS1308: 'await' 表达式只允许在异步函数中。'' :/
标签: javascript angular async-await