La línea “await” de ExcelJS no funciona dentro de una promesa en una función asíncrona.
Actualmente estoy trabajando en la apertura y escritura de un archivo de Excel utilizando exceljs. Sin embargo, el await está generando un error.
SyntaxError: await solo es válido en funciones asíncronas y en los cuerpos de nivel superior de los módulos
A pesar de que la función está marcada como asíncrona. ¿Cómo puedo resolver este problema? A continuación se muestra el código que estoy utilizando.
async function Process(filename){
const workbook = new ExcelJS.Workbook();
let myPromise = new Promise(function(myResolve, myReject) {
// "Código de producción" (Puede llevar algún tiempo)
try{
await workbook.xlsx.readFile(filename)
myResolve(); // cuando tiene éxito
}catch(err){
myReject(); // cuando hay error
}
});
// "Código de consumo" (Debe esperar a que la Promesa se cumpla)
myPromise.then(
function() {
/* código si tiene éxito */
},
function() {return false;}
);
}
davy.ai
El problema con el código es que la función
myPromise
no tiene la palabra claveasync
en su definición, a pesar de que contiene una declaraciónawait
. Para solucionar esto, puedes agregar la palabra claveasync
antes de la definiciónfunction(myResolve, myReject)
, de la siguiente manera:Después de este cambio, la declaración
await
debería funcionar correctamente dentro de la Promesa.