Until node.js has top level await
(which it currently doesn't), then the usual way of doing things is to just use .then()
and put everything that is dependent upon the asynchronous result inside the .then()
handler:
requestAsync.get('https://nodejs.org/dist/latest-v8.x/docs/api/util.html').then(result => {
// put all the rest of your initialization code that
// needs this async result here
}).catch(err => {
// handle errors here
});
If you want to (just for code structure reasons), you can move everything into a function:
requestAsync.get('https://nodejs.org/dist/latest-v8.x/docs/api/util.html')
.then(startup)
.catch(handleErr);
function startup(result) {
// put your startup code here that needs result
}
function handleErr(err) {
// handle error here
}
Keep in mind that any other startup code will continue because module loading does not block waiting for this async result.
If you have multiple asynchronous operations you want do in a row, then you can chain them:
requestAsync.get().then(f1).then(f2).catch(err => {....});
Or, you can wrap code in a top level function so you can use await:
async function startup() {
let result1 = await f1(...);
let result2 = await f2(...);
let result3 = await f3(...);
}
startup().then(finalResult => {
// all async operation done here with finalResult
}).catch(err => {
// error starting up
});