Асинхронная работа с fs через async-await в NodeJS
Давайте теперь вместо then будем использовать альтернативный синтаксис async-await. В этом случае мы получим возможность обращаться с нашим асинхронным кодом также просто и удобно, как с синхронным.
Давайте сразу смотреть на примерах. Прочитаем текст файла и выведем его в консоль:
async function func() {
let data = await fs.promises.readFile('readme.txt', 'utf8');
console.log(data);
}
func();
Добавим обработку ошибок:
async function func() {
try {
let data = await fs.promises.readFile('readme.txt', 'utf8');
console.log(data);
} catch (err) {
console.log('что-то пошло не так');
}
}
func();
Прочитаем три файла, сольем их текст и выведем в консоль:
async function func() {
try {
let data1 = await fs.promises.readFile('1.txt', 'utf8');
let data2 = await fs.promises.readFile('2.txt', 'utf8');
let data3 = await fs.promises.readFile('3.txt', 'utf8');
console.log(data1 + data2 + data3);
} catch (err) {
console.log('что-то пошло не так');
}
}
func();
Запишем текст трех файлов в новый файл:
async function func() {
try {
let data1 = await fs.promises.readFile('1.txt', 'utf8');
let data2 = await fs.promises.readFile('2.txt', 'utf8');
let data3 = await fs.promises.readFile('3.txt', 'utf8');
await fs.promises.writeFile('res.txt', data1 + data2 + data3);
} catch (err) {
console.log('что-то пошло не так');
}
}
func();
Пусть имена наших файлов записаны в массиве. Давайте прочитаем данные наших файлов в цикле, а затем запишем их в новый файл:
async function func() {
try {
let names = ['1.txt', '2.txt', '3.txt'];
let data = [];
for (let name of names) {
data.push(await fs.promises.readFile(name, 'utf8'));
}
await fs.promises.writeFile('res.txt', data.join(''));
} catch (err) {
console.log('что-то пошло не так');
}
}
func();