I need to download a collection of images on button press. Currently, I'm doing it this way using react-native-fs
:
const downloadImageItem = async (imgUrl, id) => {
const path = `${RNFS.DocumentDirectoryPath}/${id}.jpg`;
RNFS.downloadFile({
fromUrl: imgUrl,
toFile: path,
});
};
const downloadImages = async (items) => {
for (const item of items) {
if (item.images.length) {
await downloadImageItem(item.images[0].thumb, item.images[0].id);
}
}
return Promise.resolve();
};
Calling the function from my reducer for 3 types of items:
await downloadImages(items_one);
await downloadImages(items_two);
await downloadImages(items_three);
My issue is that sometimes I receive an error message that says: Excessive number of pending callbacks: 501
Is there a better way of doing the same thing, so that the error does not appear?
A similar issue was opened on the react-native
repository in December 2019, it still hasn't been closed or addressed but I think you may find this comment useful.
The problem being described there is that queueing too many Promise
calls can be problematic. The commenter suggested using a Promise
utility function called Promise.map()
which has concurrency control out of the box, from the bluebird library.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With