Ошибка в пользовательской функции обратного вызова fs.readfile для возврата на SUCCESS или ERROR. - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь реализовать декоратор для функции fs.readFile.Вместо обычной ошибки и параметров данных эта версия должна принимать два обратных вызова в качестве аргументов (оба после имени файла) - один для вызова при успехе и один для вызова при ошибке.Оба обратных вызова имеют только один параметр (данные, прочитанные из файла или объекта ошибки).Реальная реализация просто вызывает fs.readFile.

Я не могу понять, почему это не работает, и что я делаю неправильно.Пожалуйста, помогите мне отладить это.Спасибо.

function myReadFile(fileName, successFn, errorFn) {
    fs.readFile(fileName,'utf8', function read(errorFn, successFn) {
        if (errorFn) {
            errorFn();
        }
        else {
            successFn();
        }
    });
}

1 Ответ

0 голосов
/ 24 сентября 2019

Обратный вызов fs.readFile не возвращает errorFn или successFn.

Пример из Node.js fs docs:

fs.readFile('/etc/passwd', (err, data) => {
  if (err) throw err;
  console.log(data);
});

Вместо этого вы можете передать объект err в errorFn и то же самое.для успеха с данными.

function myReadFile(fileName, successFn, errorFn) {
  fs.readFile(fileName,'utf8', function read(err, data) {
    if (err) {
      errorFn(err);
    } else {
      successFn(data);
    }
  });
}

В качестве альтернативы вы можете превратить его в Обещание следующим образом:

function myReadFile(fileName) {
  return new Promise((resolve, reject) => {
    fs.readFile(fileName,'utf8', function read(err, data) {
      if (err) {
        resolve(err);
      } else {
        reject(data);
      }
    });
  });
}
//usage:
myReadFile('/some/file')
.then(data => {
//data here
})
.catch(err => {
//error here
});
...