@9karamba

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

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

Например:
const filePaths = /*здесь функция с readdir */;
return filePaths.map(path => readFile(path));
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 2
Deissh
@Deissh
I like Python, Node.JS, bicycle and my cat.
Использовать async/await если результат промис, либо callbackи.
Ответ написан
@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)
  );
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Lensoft.pro Санкт-Петербург
от 100 000 до 140 000 руб.
Cindx Москва
от 130 000 до 180 000 руб.
21 янв. 2019, в 11:37
10000 руб./за проект
21 янв. 2019, в 11:19
15000 руб./за проект