Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
95
rated 0 times [  101] [ 6]  / answers: 1 / hits: 22019  / 7 Years ago, wed, july 12, 2017, 12:00:00

I am trying to get my head around async/await in NodeJS.



I have a function in a file as follows:



const getAccessToken = async () => {
return new Promise((resolve, reject) => {

const oauthOptions = {
method: 'POST',
url: oauthUrl,
headers: {
'Authorization': 'Basic ' + oauthToken
},
form: {
grant_type: 'client_credentials'
}
};

request(oauthOptions)
.then((err, httpResponse, body) => {
if (err) {
return reject('ERROR : ' + err);
}
return resolve(body.access_token);
})
.catch((e) => {
reject('getAccessToken ERROR : ' + e);
});
});
};

module.exports = getAccessToken;


This file is saved as twitter.js in a lib folder



In my index.js file I have the following:



const getAccessToken = require('./lib/twitter');

let accessToken;

try {
accessToken = await getAccessToken();
} catch (e) {
return console.log(e);
}

console.log(accessToken);


I get an error trying to run this code saying:



>   accessKey = await getAccessToken();
> ^^^^^^^^^^^^^^
>
> SyntaxError: Unexpected identifier
> at createScript (vm.js:74:10)
> at Object.runInThisContext (vm.js:116:10)
> at Module._compile (module.js:533:28)
> at Object.Module._extensions..js (module.js:580:10)
> at Module.load (module.js:503:32)
> at tryModuleLoad (module.js:466:12)
> at Function.Module._load (module.js:458:3)
> at Function.Module.runMain (module.js:605:10)
> at startup (bootstrap_node.js:158:16)
> at bootstrap_node.js:575:3


Can I not await the required function as it is marked async ?


More From » node.js

 Answers
21

Your code is already correct. Without changing anything in twitter.js you have two options to use it:




  1. Functions marked with async always return promises. Therefore you can simply do:



    const getAccessToken = require('./lib/twitter');

    getAccessToken().then(accessToken => {
    console.log(accessToken);
    })

  2. All functions that return promises can be awaited upon but you cannot use await outside of an async marked functions. So you can also do:



    const getAccessToken = require('./lib/twitter');

    (async function () {
    var accessToken = await getAccessToken();
    console.log(accessToken);
    })();



The async/await keywords does not change how async functions behave. You still cannot wait on async functions synchronously, you can only do that inside an asynchronous function. Async/await is just a syntax sugar on top of promises.


[#57111] Monday, July 10, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
zoiel

Total Points: 692
Total Questions: 90
Total Answers: 89

Location: Rwanda
Member since Thu, Feb 10, 2022
2 Years ago
;