Javascript writestream完成后如何返回承诺?

Javascript writestream完成后如何返回承诺?,javascript,node.js,typescript,promise,fs,Javascript,Node.js,Typescript,Promise,Fs,我有这样一个函数,它创建一个写流,然后将字符串数组写入文件。我想让它在写完后还给我一个承诺。但我不知道我如何才能做到这一点 function writeToFile(filePath: string, arr: string[]): Promise<boolean> { const file = fs.createWriteStream(filePath); arr.forEach(function(row) { file.write(row + "\n");

我有这样一个函数,它创建一个写流,然后将字符串数组写入文件。我想让它在写完后还给我一个承诺。但我不知道我如何才能做到这一点

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*/});
}
函数writeToFile(filePath:string,arr:string[]):Promise{
const file=fs.createWriteStream(文件路径);
arr.forEach(函数(行){
file.write(行+“\n”);
});
file.end();
on(“finish”,()=>{/*做点什么来回报承诺,但我不知道怎么做*/});
}

谢谢你的评论

在操作完成之前,您需要返回
承诺。
比如:

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) });
    });
}
函数writeToFile(filePath:string,arr:string[]):Promise{
返回新承诺((解决、拒绝)=>{
const file=fs.createWriteStream(文件路径);
arr.forEach(函数(行){
file.write(行+“\n”);
});
file.end();
on(“finish”,()=>{resolve(true)});
});
}
您需要使用:

函数writeToFile(filePath:string,arr:string[]):Promise{
返回新承诺((解决、拒绝)=>{
const file=fs.createWriteStream(文件路径);
用于(arr的常数行){
file.write(行+“\n”);
}
file.end();
on(“finish”,()=>{resolve(true);});//不确定为什么要传递布尔值
file.on(“error”,reject);//别忘了!
});
}

谢谢!我认为你是对的。我不需要传递布尔值。void应该足够了。出于好奇,如果你返回一个布尔值(或void),那么你真的需要承诺吗?@guillemmansilla你返回的是一个布尔值的承诺。所以你仍然知道手术什么时候成功,或者是否成功。哦,我明白了。因此,这方面的用例类似于:writeToFile('foo')。然后(function(response){console.log(response);//true}@GuillemoMansilla是的,完全正确
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!
  });
}