es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;}
  );
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la función myPromise no tiene la palabra clave async en su definición, a pesar de que contiene una declaración await. Para solucionar esto, puedes agregar la palabra clave async antes de la definición function(myResolve, myReject), de la siguiente manera:

    let myPromise = new Promise(async function(myResolve, myReject) {
    

    Después de este cambio, la declaración await debería funcionar correctamente dentro de la Promesa.

Comments are closed.