0

    var arr = ["node.js", "Java", "C#"];
var newArr = [];

let promise = new Promise((resolve, reject) => {

        for(let i = 0; i < arr.length; i++) {
            setTimeout(() => {
                newArr.push(arr[i])
                resolve(newArr);
            }, 1000);
        }

});

promise
        .then(result => {
             alert(result);
         }
);

Now it alerts data after first loop. How to display data from async operation with promises, after it passes whole loop?

Desired behavior: Add data to newArr in async mode, and display it after loop ends.

Angry B
  • 305
  • 2
  • 17

1 Answers1

2

You need to have multiple promises with promise all

const myPromises = [];
for (let i=0; i<5; i++) {
  myPromises.push(new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log("done", i);
        resolve(i)
      } , i*500);
  })); 
}

Promise.all(myPromises).then(values => { 
  console.log("All: ", values)
});
epascarello
  • 204,599
  • 20
  • 195
  • 236