1

I have an array of URLs and I want to open all these URLs one by one in the new tab with the specified delay. I have tried the below method, but it opens all URLs in a one-shot after a delay of 2 seconds. Please suggest the code changes.


items = ["a.com", "b.com", "c.com", "d.com"]

items.forEach((url, index) => {
    if (index <= 49) {
        setTimeout(() => {  window.open(url, "_blank"); }, 2000);
    }
})
kiran
  • 444
  • 3
  • 15

1 Answers1

1

Use async function for that.

Sample Implementation.

items = ["a.com", "b.com", "c.com", "d.com"];

function resolveAfter2Seconds(index) {
  return new Promise(resolve => {
    setTimeout(() => {
      window.open(items[index], "_blank")
      resolve('resolved');
    }, 2000);
  });
}

async function asyncCall() {
  console.log('calling');
  let index = 0;
  while (index < items.length) {
    const result = await resolveAfter2Seconds(index);
    console.log(result);
    // expected output: "resolved"
    index++;
  }
}

asyncCall();
Nitheesh
  • 19,238
  • 3
  • 22
  • 49