【问题标题】:Wait for all url to be finished writen等待所有 url 完成写入
【发布时间】:2023-03-11 11:40:01
【问题描述】:

嘿,我需要一些帮助,我想要的是等待来自 url 的所有文件完成下载(写入),然后当它完成时它将运行另一个函数。在我编写的这个代码块中,将在等待所有文件完成写入之前先运行解析,这不是我想要的。

pages 参数是一个 url 数组。

所以,如果我使用“完成”回调,回调将针对每个完成的 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);
  });
}

【问题讨论】:

标签: javascript node.js request fs


【解决方案1】:

只需将 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);
    });
}

【讨论】:

  • 不知道为什么人们不喜欢我,我刚刚回答了一个关于如何创建和等待完成的承诺列表的问题,如果这个特定库有更好的替代方案,请告诉我,而不是简单地给予not useful 奖励
  • 当我完成我的工作时会检查这个,tysm。如果它有效,将标记它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多