@9karamba

Как использовать map c массивом, заполненным асинхронно?

Я с помощью функции readdir заполняю массив [путь+название файла] и хочу с помощью map считать содержимое каждого файла, но массив не успевает заполниться, как это исправить?
Мне нужно использовать именно readdir, так что синхронный readdirSync не предлагать

Например:
const filePaths = /*здесь функция с readdir */;
return filePaths.map(path => readFile(path));
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
@Aves
const fs = require('fs');
const path = require('path');

async function readDirFiles(dir) {
  const filePaths = await fs.promises.readdir(dir, {withFileTypes: true});
  return await Promise.all(
    filePaths
      .filter(e => e.isFile())
      .map(async (e) => {
        const p = path.join(dir, e.name)
        return {
          path: p,
          content: await fs.promises.readFile(p, {encoding: 'utf8'})
        };
      })
  );
}

readDirFiles('.')
  .then(files => {
    console.log(files);
  })
  .catch(err =>
    console.error(err)
  );
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Deissh
@Deissh
I like Python, Node.JS, Go, pain, bugs and my cat.
Использовать async/await если результат промис, либо callbackи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы