我试图从服务器下载多个文件。我与memory leak
,for
和forEach
遇到了错误map
,所以我使用了这个回调函数,它可以运行:
.then(files => {
const downloadFile = callback => {
if (files.length > 0) {
let file = files.shift();
client.download(`/${file}`, `./${file}`, () => {
console.log(`Downloaded: ${file}`);
downloadFile(callback);
});
}
else {
callback();
}
};
downloadFile(() => {
console.log('All done');
})
})
我想将其转换为Promise function
,但我已经卡住了,我已经尝试了new Promise((resolve, reject)=>{})
和Promise.all()
但它只返回了第一个文件。
答案 0 :(得分:0)
您可以将map()
与files
数组一起使用,为每个文件生成一个承诺。然后,您可以致电Promise.all()
以了解他们何时全部下载。
由于我们对您的client.download()
方法一无所知,我们猜测它正在做它应该做的事情。奇怪的是,它的回调并没有采用实际文件数据的参数。
let promises = files.map(file => {
return new Promise((resolve, reject) => {
client.download(`/${file}`, `./${file}`, () => {
// should this call back have some data or error checking?
console.log(`Downloaded: ${file}`);
});
})
})
Promise.all(promises)
.then(() => console.log("all done"))
由于这发生在另一个then()
内,您可以返回Promise.all(promises)
来处理它。