Почему узел 10 сделал обязательным передавать обратный вызов на fs.writeFile ()? - PullRequest
0 голосов
/ 18 сентября 2018

Внезапно я начал получать эту ошибку в своем приложении, когда ядро ​​узла было обновлено до 10.7.0

TypeError [ERR_INVALID_CALLBACK]: Callback must be a function

Код, который работал с узлом 4.5: fs.writeFile(target, content);

ПослеНемного отладки Я нашел это в node_internal / fs.js:

function writeFile(path, data, options, callback) {
  callback = maybeCallback(callback || options);
  ...
}
function maybeCallback(cb) {
  if (typeof cb === 'function')
    return cb;
  throw new ERR_INVALID_CALLBACK();
}

Конечно, если здесь не передать третий / четвертый аргумент, мой код потерпит неудачу.Я хочу знать, есть ли способ смягчить эту проблему.Или, если нет, что может быть мотивом такого переломного изменения.В конце концов, fs.writeFile () является такой базовой операцией, такие проблемы, как эти, действительно являются проблемой при обновлении.

1 Ответ

0 голосов
/ 18 сентября 2018

Node.js задокументировал цель этого изменения: https://github.com/nodejs/node/blob/master/doc/api/deprecations.md#dep0013-fs-asynchronous-function-without-callback

Здесь гораздо больше дискуссий: https://github.com/nodejs/node/pull/12562#issuecomment-300734746

На самом деле кажется, что некоторые разработчики согласны с вами, однако решение было принято, и теперь требуется обратный вызов.вам просто нужно добавить обратный звонок.Даже пустой будет работать нормально:

fs.writeFile(target, content, () => {});

Я понимаю, что это может потребовать много изменений для работающего в данный момент кода, но на самом деле это может быть хорошей возможностью для вас также добавить обработку ошибок.

...