writestream 完成时如何返回承诺? [复制]

Posted

技术标签:

【中文标题】writestream 完成时如何返回承诺? [复制]【英文标题】:How to return a promise when writestream finishes? [duplicate] 【发布时间】: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*/);

感谢您的任何评论!

【问题讨论】:

【参考方案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) );
    );

【讨论】:

以上是关于writestream 完成时如何返回承诺? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何键入 Redux thunk 动作创建者以返回承诺

如何在单个 Spark 作业中调用多个 writeStream 操作?

节点承诺和返回值

等待多个承诺完成

什么是everyauth 承诺?

在返回函数的变量之前,如何等待 promise 完成?