javascript - Hur returnerar man ett promise när writestream slutförs?


Jag har en sådan funktion, som skapar en skrivström och sedan skriver strängarrayen till filen. Jag vill att den ska returnera ett Promise när skrivningen är klar. Men jag vet inte hur jag kan få detta att fungera.

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*/});
}

Tack för alla kommentarer!

Svar #1

Du kommer att vilja använda Promise-konstruktorn:

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!
  });
}

Svar #2

Du behöver returnera Promise innan operationen var slutförd.
Något som:

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) });
    });
}

Relaterade artiklar