Scenario
Consider a situation where you need to send mail to list of emails. you will write a function which can send a single email at once.
Let's say that you have a list of emails like this
1const emailList = ["ganesh@gmail.com", "john@gmail.com", "tarry@gmail.com"]
Firstly, you write a single function which takes an emailId and send a mail to the corresponding mail.
1function sendMail() {2 //Sending mail3}
you need to call the function as per the count of emails you have in the array.
you can think of, why can't I call the function inside the for a loop. it will be simple ..right??.
No... that's not going to work. because sending a mail is an asynchronous function. Loop will not wait until the previous function completes
So, there might be a chance of missing a function call or sending mail. To solve this problem, we need to use Promise.
Promises inside a loop - Javascript ES6
Firstly, write the email sending logic inside a function which returns a Promise.
1const sendEmail = userEmail => {2 return new Promise(async (resolve, reject) => {3 //this is a mock email send logic4 setTimeout(() => {5 resolve(`Email Sent to ${userEmail}`)6 }, 3000)7 })8}
call the function inside the Javascript map() function and Promise.all
1const sendEmails = async () => {2 const userEmails = ["ganesh@gmail.com", "john@gmail.com", "Sam@gmail.com"]34 const status = await Promise.all(userEmails.map(email => sendEmail(email)))56 console.log("Status =>", status)7}
This is one of the ways with which you can call promise inside loops.
Comments
Post a Comment