How to assign axios respond to variable?

68 Views Asked by At

In Nodejs v16.15.1, I can easily assign axios respond to a variable.

const clientlist = await axios.get('http://test.lab/api/getclients');

However, when I upgraded to latest Nodejs v19.6.0, I keep getting error: await is only valid in async functions.

So, I tried to change the code as per below

var uid1 = 0;

async function getUID() {
  let res = await axios.get('http://test.lab/api/?user=test');
  let data = res.data;
  return data;
}

// Call start
(async() => {
  console.log('before start, the value is '+ uid1);

  uid1 = await getUID1();
  
  console.log('after start, the value is '+ uid1);
})();

//trying to use uid1 for the rest of the code

console.log('outside async, the value is '+ uid1);

// returned empty

However, I can only use axios respond within the async scope. I cannot use it outside.

What can I do to make it work like it did in nodejs v16?

1

There are 1 best solutions below

1
On BEST ANSWER

Node.js still supports top-level await, but (still) only in ECMAScript modules (i.e. not in the default, CommonJS, modules).

To make Node.js recognise the file as an ECMAScript module, either:

  • Add "type": "module" to your package.json file and continue using a .js file extension.
  • Rename the file to have a .mjs file extension

This question covers why your attempted workaround (with an IIFE) failed.