【发布时间】:2019-01-05 23:52:53
【问题描述】:
let base64Data: string;
let attachment: Attachment;
let blob: Blob;
docList.forEach(([pdfDoc, title]) => {
blob = pdfDoc.output('blob');
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
base64data = reader.result;
attachment = new Attachment();
attachment.setFilename(title);
attachment.setContent(base64data);
attachment.setType('application/pdf');
attachments.push(attachment);
}
});
pdfDoc 是一个jsPDF; Attachment 是我自己的类,带有指定的字段。
如果我在调试模式下运行上述代码并添加断点,attachments 数组会按预期填充。否则数组最终为空白。我知道同步循环和 FileReader 存在问题。我找到了以下答案
Looping through files for FileReader, output always contains last value from loop
但我不确定如何将其应用于我的案例。有什么建议?提前致谢。
【问题讨论】:
-
你熟悉 Promise 吗?
-
不管怎样,问题不在于 FileReader 的返回值,而是它异步读取的事实。您在数组被填充之前记录它。
-
我听说过 Promises;不确定如何使用它们。已编辑的问题——我意识到问题是异步性。
标签: javascript typescript angular6