等待所有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);
    });
}