等待所有url写完
Wait for all url to be finished writen
嘿,我需要一些帮助,我想要的是等待来自 url 的所有文件完成下载(写入),然后完成后它将 运行 另一个功能。在我写的这个代码块中,在等待所有文件完成写入之前,解析将是 运行,这不是我想要的。
pages 参数是 url.
的数组
所以,如果我使用 '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
函数调用放在完成回调中,并用 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);
});
}
嘿,我需要一些帮助,我想要的是等待来自 url 的所有文件完成下载(写入),然后完成后它将 运行 另一个功能。在我写的这个代码块中,在等待所有文件完成写入之前,解析将是 运行,这不是我想要的。
pages 参数是 url.
的数组所以,如果我使用 '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
函数调用放在完成回调中,并用 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);
});
}