Загрузка каталога изображений в React Native - PullRequest
0 голосов
/ 30 апреля 2020

Мне нужно скачать каталог изображений (всего около 5000 изображений), для этого я использую модуль react-native-fs. Моя проблема заключается в том, что каждый раз, когда я вызываю функцию downloadCatalog, я получаю сообщение об ошибке Excessive number of pending callbacks: 501...

Поэтому я пытался сделать это с помощью функции Promise.map() из библиотеки bluebird, но, похоже, она ничего не изменила ,

Моя функция загрузки

const downloadImageItem = async (url, id) => {
  const path = `${RNFS.DocumentDirectoryPath}/${id}.jpg`;

  return RNFS.downloadFile({
    fromUrl: url,
    toFile: path,
  });
};

Функция, которая перебирает массив данных и динамически формирует URL для скачать

const downloadImages = async (items) => {
  await Promise.map(
    items,
    async (item) => {
      item.images.forEach((image) => {
        downloadImageItem(image.thumb, image.id);
      });
    },
    {concurrency: 100},
  );

  return Promise.resolve;
};

Я называю это для 3 различных типов предметов

const downloadCatalog = () => {
  await downloadImages(category1.items);
  await downloadImages(category2.items);
  await downloadImages(category3.items);
} 

Вот пример ответа JSON от сервера, через который я зацикливаюсь

[{
"id": 199,
"name": "Annual mercury",
"nameSynonyms": "",
"latinName": "Mercurialis annua",
"latinNameSynonyms": "",
"description": "<p><strong>Description</strong></p>\r\n<p style=\"text-align: justify;\">This is an annual herb growing 10 to 30 centimeters tall with oppositely arranged oval leaves each a few centimeters long. The male flowers are borne in spikelike clusters sprouting from leaf axils, and female flowers grow in clusters of 2 or 3. The fruit is a bristly capsule 2 or 3 millimeters wide containing shiny, pitted seeds.</p>",
"slug": "annual-mercury",
"images": [
{
"id": 1562,
"image": "http://newfs.s3.amazonaws.com/taxon-images-1000s1000/Euphorbiaceae/mercurialis-annua-fl-nkramer.jpg",
"thumb": "http://static.catalog.farmis.lt/problems/2/2f/2f0/2f046943-b5cb-41b8-b481-75412444cca2.jpg"
},
{
"id": 1563,
"image": "http://www.unavarra.es/herbario/fotos/Merc_annu/image002.jpg",
"thumb": "http://static.catalog.farmis.lt/problems/0/00/00d/00d1cf82-b117-4f2d-9498-9eb91eef5e5e.jpg"
},
{
"id": 1565,
"image": "http://calphotos.berkeley.edu/imgs/512x768/0000_0000/1005/0206.jpeg",
"thumb": "http://static.catalog.farmis.lt/problems/b/b1/b16/b16930f4-23c9-480f-9a46-4f1467c0ceb5.jpg"
}

]
}, 
...]

Это происходит из-за того, что я что-то испортил внутри функции Promise.map()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...