【问题标题】:How to return a promise when writestream finishes? [duplicate]writestream 完成时如何返回承诺? [复制]
【发布时间】:2017-02-14 07:17:31
【问题描述】:

我有这样一个函数,它创建一个写入流,然后将字符串数组写入文件。我想让它在写作完成后返回一个 Promise。但我不知道如何才能完成这项工作。

function writeToFile(filePath: string, arr: string[]): Promise<boolean> {
   const file = fs.createWriteStream(filePath);
   arr.forEach(function(row) {
     file.write(row + "\n");
   });
   file.end();
   file.on("finish", ()=>{ /*do something to return a promise but I don't know how*/});
}

感谢您的任何评论!

【问题讨论】:

    标签: javascript node.js typescript promise fs


    【解决方案1】:

    你会想要使用Promise constructor

    function writeToFile(filePath: string, arr: string[]): Promise<boolean> {
      return new Promise((resolve, reject) => {
        const file = fs.createWriteStream(filePath);
        for (const row of arr) {
          file.write(row + "\n");
        }
        file.end();
        file.on("finish", () => { resolve(true); }); // not sure why you want to pass a boolean
        file.on("error", reject); // don't forget this!
      });
    }
    

    【讨论】:

    • 谢谢!我想你是对的。我不需要传递布尔值。 void 就足够了。
    • 出于好奇,如果您返回一个布尔值(或 void),那么您真的需要一个承诺吗?
    • @GuillemoMansilla 您正在返回一个 promise for 布尔值。所以你仍然知道操作何时成功,或者是否失败。
    • 哦,我明白了。所以用例类似于: writeToFile('foo').then(function(response) { console.log(response); // true }
    • @GuillemoMansilla 是的,完全正确
    【解决方案2】:

    您需要在操作完成之前返回Promise
    比如:

    function writeToFile(filePath: string, arr: string[]): Promise<boolean> {
        return new Promise((resolve, reject) => {
            const file = fs.createWriteStream(filePath);
            arr.forEach(function(row) {
                file.write(row + "\n");
            });
            file.end();
            file.on("finish", () => { resolve(true) });
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-20
      • 2014-01-04
      • 2020-07-11
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多