如何解决等待所有网址写入完毕
Hei,我需要一些帮助,我想要的是等待url完成所有文件的下载(写入),然后完成后它将运行另一个功能。在我编写的此代码块中,将先运行解析,然后再等待所有文件完成写入,这不是我想要的。
pages参数是网址数组。
因此,如果我使用“ finish”回调,则将对每个完成的URL运行该回调,我要做的是等待所有URL,然后运行resolve();
function urlDownload(TITLE,PAGES) {
const download = new Promise((resolve,reject) => {
PAGES.map((value,index) => {
request
.get(value)
.pipe(fs.createWriteStream(`folder/${TITLE}/${index}.jpg`))
.on("finish",() => console.log(`Finished downloading ${index}.jpg`));
});
resolve("Done");
});
download.then((resolve) => {
console.log(resolve);
});
}
解决方法
只需将resolve
函数调用放在finish回调中,并用Promise分别包装每个请求
function urlDownload(TITLE,PAGES) {
const download = Promise.all(PAGES.map((value,index) => {
return new Promise((resolve) => request
.get(value)
.pipe(fs.createWriteStream(`folder/${TITLE}/${index}.jpg`))
.on("finish",() => (console.log(`Finished downloading ${index}.jpg`,resolve("Done")))));
}));
download.then((resolve) => {
console.log(resolve);
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。