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 完成时如何返回承诺? [复制]的主要内容,如果未能解决你的问题,请参考以下文章