En mi aplicación web, intento procesar una serie de objetos de archivo, que son archivos adjuntos para el correo electrónico que se enviará. Paso por esta matriz en una función para obtener el contenido del archivo y agregarlo a la matriz de archivos adjuntos del objeto de mensaje. El siguiente es el código:
export class Message { constructor( public subject: string = '', public text: string = '', public attachments: Attachment[] = []) {} } function getMessage(message: NewMessage, attachments: File[]) { attachments.forEach(file => { let newAttachment = new Attachment(); newAttachment.dateiname = file.name; newAttachment.dateityp = file.type; newAttachment.size = file.size; const reader = new FileReader(); reader.onload = (event) => { newAttachment.fileData = event.target.result.toString(); message.attachments.push(newAttachment); }; reader.readAsText(file); }); return message; }El problema al que me enfrento se debe al hecho de que una instancia de FileReader funciona de forma asíncrona. Mi método regresa antes de que se active el evento onload y el contenido del archivo se agrega al objeto del mensaje. Intenté devolver el objeto del mensaje a través del evento onloadend, pero aquí aparece el error de que la función debe devolver un valor de tipo Mensaje:
reader.onloadend = () => { return message; };¿Cómo puedo solucionar este problema?