Long story short, in order to return response in Async function, you either need a callback or use async/await structure.
Case 1: Using callback –
Callback is the function which runs after asynchronous function completed successfully. Consider this code example –
superhero.json
{
avenger1: 'Captain America',
avenger2: 'Ironman',
avenger3: 'Hulk',
avenger4: 'Hawkeye',
}
var data = {};
const callback = (data) => {
console.log(data);
// Output: {avenger1: 'Captain America' ...}
}
fetch('/superhero.json')
.then(response => response.json())
.then(data => callback(data));
console.log(data) // Output: {}
From the above code, you can understand the flow of asynchronous functions. We are fetching superhero.json from remote server. Calling something from server takes more time than running code on local machine. That’s why our data variable is still empty after fetch call. Because fetch is not yet completed and our code moved to the next line.
Case 2: Using async/await
To simplify things for developers and give them a feel of synchronous coding, javascript came up with a format async/await. Here you do not use callbacks, else code like synchronous. Check this example –
const superhero = async () => {
const response = await fetch('/superhero.json');
const data = await response.json();
return data;
}
There are two properties of async/await –
- You can only use
awaitwithin the function which is markedasync. - After using
await, you can use the variable in further code, within the function, as like as normal flow. So, abovesuperherofunction will returndataonly after it successfully get fromfetch.