Получить несколько ссылок внутри цикла foreach - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть массив ссылок, например:

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

Чем я хочу зациклить все элементы и запустить их выборку. Тем не менее выборка асинхронна, поэтому я получаю запрос больше раз, когда решаю эту проблему, удаляя элемент из массива следующим образом:

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)
})

Интересно, есть ли лучшее решение, чтобы решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Я бы использовал Promise.all() в этом случае. Начните с получения тела от каждого ответа. Затем сделайте что-нибудь с ответами после того, как соответствующие обещания будут выполнены:

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

Promise.all(urls.map(url =>
   // do something with this response like parsing to JSON
   fetch(url,{mode: 'no-cors'}).then(response => response)
)).then(data => {
   // do something with the responses data
})
0 голосов
/ 19 ноября 2018

Вы хотите использовать Promise.all для этого, например:

// 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
})
...