@jeruthadam
Я крут

Как переписать это на промисах?

Как этот код переписать на промисах?

fs.readFile('./data.json', (err, data) => {
  if (err) {
    console.error('unable to read the file')
  }
  else {
    try {
      data = JSON.parse(data)
      console.log(data.name)
    }
    catch (e) {
      console.error('invalid JSON in file')
    }
  }
})


Я сделал так, но работает некорректно, постоянно возвращает первый кетч

const promise = new Promise ((resolve, reject) => {
  fs.readFile('./data.json', (err, data) => {
    if (err) {
      reject()
    }
    else {
      try {
        resolve()
      }
      catch (e) {
        reject()
      }
    }
  })
})

promise
  .then((data) => {
    data = JSON.parse(data)
    console.log(data.name)
  })
  .catch((e) => {
    console.error('unable to read the file')
  })
  .catch(SyntaxError, (e) => {
    console.error('invalid JSON in file')
  })
  • Вопрос задан
  • 280 просмотров
Пригласить эксперта
Ответы на вопрос 3
SPAHI4
@SPAHI4
реактовцы - это не девы, а прокидыватели пропсов
const {promisify} = require('util');

const fs = require('fs');
const readFileAsync = promisify(fs.readFile); 

readFileAsync(filePath)
  .then((text) => {
      console.log('CONTENT:', text);
  })
  .catch((err) => {
      console.log('ERROR:', err);
  });
Ответ написан
kn1ght_t
@kn1ght_t
на ноде ни разу не писал, но попробуйте так:

function readFileAsync(path) {
  return new Promise(function (resolve, reject) {
    fs.readFile(path, function (error, result) {
      if (error) {
        reject(error);
      } else {
        resolve(result);
      }
    });
  });
}

(async function() {
  try {
    const data = await readFileAsync('./data.json');
  } catch(error) {
    console.log(error);
  }
})();
Ответ написан
0xD34F
@0xD34F
постоянно возвращает первый кетч

Неудивительно - ведь вы ничего не передаёте в resolve. Так что вы парсите не содержимое файла, а undefined.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы