Как правильно использовать createReadStream в fs/promises
При использовании API промисов в fs в первую очередь я должен открыть файловый дескриптор и только потом получить доступ к нужному мне методу, в моем случае это createReadStream
const fileHandle = await fs.open(filePath, 'r')
const readableStream = fileHandle.createReadStream(opt)
Как мне правильно воспользоваться этит методом через промисы? И самое главное, как правильно и красиво закрыть файловый дескриптор, так как при вставке в блок finally строки await fileHandle?.close() файл не успевает прочитаться и закрывается сразу Вот то, что я пробовал
const fs = require("fs/promises");
async function foo() {
const fileHandle = await fs.open("text.txt", "r");
const readableStream = fileHandle.createReadStream();
try {
return new Promise((resolve, reject) => {
let data = "";
readableStream .on("data", (chunk) => {
data += chunk;
});
readableStream .on("end", () => {
resolve(data);
});
readableStream .on("end", reject);
});
} catch (err) {
console.log(err);
} finally {
await fileHandle?.close();
}
}
foo().then((data) => console.log(data));
Ответы (1 шт):
Автор решения: ksa
→ Ссылка
Как мне правильно воспользоваться этит методом через промисы?
Например вот так...
const fs = require("fs/promises");
async function foo() {
let fileHandle
let data
try {
fileHandle = await fs.open("tmp.txt", "r");
const readableStream = fileHandle.createReadStream();
data = await new Promise((resolve, reject) => {
let data = "";
readableStream.on("data", chunk => data += chunk);
readableStream.on("end", _ => resolve(data));
readableStream.on("error", reject);
});
} catch (err) {
console.error(err);
}
fileHandle?.close()
return data ?? null
}
foo().then(data => console.log(data));