Im currently working on opening and writing on an excel file using exceljs. However, the await is making an error
SyntaxError: await is only valid in async functions and the top level bodies of modules
Despite the function being in async. How can I resolve this problem? The following is the code that I am using
async function Process(filename){
const workbook = new ExcelJS.Workbook();
let myPromise = new Promise(function(myResolve, myReject) {
// "Producing Code" (May take some time)
try{
await workbook.xlsx.readFile(filename)
myResolve(); // when successful
}catch(err){
myReject(); // when error
}
});
// "Consuming Code" (Must wait for a fulfilled Promise)
myPromise.then(
function() {
/* code if successful */
},
function() {return false;}
);
}
Agreeing with the comments, you should avoid the Promise
constructor antipattern and never use await
in the executor of a new Promise
!
You should write either
function Process(filename){
const workbook = new ExcelJS.Workbook();
// "Producing Code" (May take some time)
let myPromise = workbook.xlsx.readFile(filename);
// "Consuming Code"
return myPromise.then(function() {
/* code if successful, waiting for a fulfilled Promise */
return …;
}, function() {
/* code when error, waiting for a rejected Promise */
return false;
});
}
or
async function Process(filename){
const workbook = new ExcelJS.Workbook();
try {
// "Producing Code" (May take some time)
await workbook.xlsx.readFile(filename);
// "Consuming Code" (wait for the promise to be fulfilled)
return …;
} catch(err) {
// Code when error in producing or consuming code
return false;
}
}