在 foreach 循环中获取多个链接

2022-01-20 00:00:00 asynchronous fetch javascript

I have array of links like so:

let array = ['https://1','https://2','https://3']

Than i want to loop all elements and run fetch on them. Still fetch is async so i get request more times i deal this problem removing element from array like so:

array.forEach((link,index) => {
    fetch(link, {mode: 'no-cors'}).then(function () {
        //more stuff not inportant
    }).catch(e => {
        console.error('error', e);
    });
    array.splice(index,1)
})

I wonder is there better solution to solve this ?

解决方案

You want to use Promise.all for this, like so:

// store urls to fetch in an array
const urls = [
  'https://dog.ceo/api/breeds/list',
  'https://dog.ceo/api/breeds/image/random'
];

// use map() to perform a fetch and handle the response for each url
Promise.all(urls.map(url =>
  fetch(url)
    .then(checkStatus)                 
    .then(parseJSON)
    .catch(logError)
))
.then(data => {
  // do something with the data
})

相关文章