gpt4 book ai didi

android - 使用 Expo.Filesystem.downloadAsync 下载大量文件有时会无限期地卡住

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:25 24 4
gpt4 key购买 nike

我正在使用 Expo.Filesystem.downloadAsync 下载大号。图像和视频等文件。但它有时会在某个时刻无限期地卡住。我想在循环内下载文件。代码是:

        let image_downloading = section.map(async (item, i) => {
item.image !== null ?
await FileSystem.downloadAsync(item.image,
directory + item.image.split("/").reverse()[0]
)
.then(({ uri }) => {
item['image'] = uri;
console.log('Finished downloading section to ', uri);
})
.catch(({error}) => {
console.log('errorrrrrrrrrrrrr',error)
})
: null
});
await Promise.all(image_downloading);

我也试过使用 FileSystem.createDownloadResumable。使用 createDownloadResumable 时下载速度变得非常慢

最佳答案

实际问题出在我发送下载文件请求的服务器上。

它会在一次收到大量请求时卡住。

所以我改变了我的功能,一次只发送 20 个请求,等待一秒钟再发送下一个 20。

首先我将我的数组分成相同大小的 block

let item_chunk_size = 20;
let itemArray = [];
for (let i = 0;i<items.length; i+= item_chunk_size) {
let myChunk = items.slice(i, i+item_chunk_size);
itemArray.push(myChunk)
}

然后一次发送20个请求下载图片

for (let i=0;i<itemArray.length;i++){
let itemChunk = itemArray[i].map(async item => {
if(item.image !== '' && item.image){
await FileSystem.downloadAsync(
item.image,
directory + item.image.split("/").reverse()[0]
)
.then(({uri}) => {
this.setState({count:this.state.count+1});
item['image'] = uri;
console.log('Finished downloading section to ', uri);
})
}
if(item.video !== '' && item.video){
await FileSystem.downloadAsync(
item.video,
directory + item.video.split("/").reverse()[0]
)
.then(({uri}) => {
this.setState({count:this.state.count+1});
item['video'] = uri;
console.log('Finished downloading section to ', uri);
})
}
});
await Promise.all(itemChunk);
await this.wait(1000);
}

20次请求后等待一秒的函数

 wait = async(ms) => {
return new Promise(resolve => {
setTimeout(resolve, ms);
})
}

关于android - 使用 Expo.Filesystem.downloadAsync 下载大量文件有时会无限期地卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56679276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com