Async and Await enteres in to handle complexity of Promises.
Which is a call back of hell problem, to make it look like synchronous but it's act asynchronous and non-blocking behind the scenes.
const myFunction = () => { return 'Test'; } // Normal function const myAsyncFunction = async () => {return 'Test'; } //Async function which will return a Promise now.
As in above now we can create a Promise like function just by adding async in front of ().
We now want a function to wait till it's child function to finish it's execution.
Take a look at below example.
function FirstFunction(){ setTimeout(function(){console.log('execution line we want to execute first and want to wait till 5 seconds.');}, 5000); } function SecondFunction(){ FirstFunction(); console.log('execution line we want to call last.'); } function Start() { SecondFunction(); // Calling only second one as first called inside of it. } Start();// Calling start function Output: "execution line we want to call last." //Wait for 5 seconds to get below as we applied 5 seconds timeout. "execution line we want to execute first and want to wait till 5 seconds."
As in above example it will not wait till 5 seconds to complete.
Now to make it wait till 5 seconds, below is how we can achive using await.
const FirstFunction = async () => { return new Promise(resolve => { setTimeout(function(){return resolve('execution line we want to execute first and want to wait till 5 seconds.'); // Here creating promise is necessary and resolve in setTimeout to return resolve to make it synchronous }, 5000); }); } const SecondFunction = async () => { //remember we have to make it async so to use await in this function const x = await FirstFunction(); // First function that is having async so it act like Promise here. return x + '\nexecution line we want to call last.'; } SecondFunction().then(res => { console.log(res) });// Calling start function Output: "execution line we want to execute first and want to wait till 5 seconds." "execution line we want to call last."
Top comments (0)