fs.writeFile() не возвращает обратный вызов

Я пытаюсь записать файл с данными аутентификации пользователей на диск. Для этого я написал следующую функцию:

function writeAuthFile(data, success, fail) {
  var fs = require('fs');
  fs.writeFile('auth.json', JSON.stringify(data), function(error) {
    if(error) { 
      console.log('[write auth]: ' + err);
        if (fail)
          fail(error);
    } else {
      console.log('[write auth]: success');
        if (success)
          success();
    }
  });
}

Но он никогда не вызывает обратный вызов. Я просмотрел документацию по NodeJS для fs, и все вроде бы подтвердилось. Также кажется, что все другие асинхронные выполнения остановлены.

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


person Feanaro    schedule 16.02.2015    source источник
comment
Просто чтобы быть совершенно ясным: никогда не вызывает обратный вызов, вы имеете в виду, что ваши console.log вызовы никогда не выполняются или что success/fail обратные вызовы не выполняются?   -  person apsillers    schedule 16.02.2015
comment
Оба и все выполнение других вызовов, похоже, тоже остановились.   -  person Feanaro    schedule 16.02.2015


Ответы (3)


Ваш код выглядит нормально, я копирую, вставляю и запускаю его, просто вызывая writeAuthFile({test: 1});, файл auth.json был создан. Так, мб ошибка где-то выше? добавьте console.log после строки var fs = require('fs'); и проверьте.

person Daniel    schedule 16.02.2015
comment
У меня был console.log() после var fs = require('fs'); и все работало нормально. Также все как бы останавливается. После звонка writeAuthFile() я занимаюсь другими делами, чего сейчас не происходит. Может быть, это как-то связано с разрешениями или, может быть, с созданием дескриптора файла. В документах говорится, что он должен перейти к обратному вызову и заполнить параметр error. - person Feanaro; 16.02.2015
comment
Хорошо, проверь свой data, мб он содержит что-то не так для JSON.stringify? - person Daniel; 16.02.2015
comment
Большое спасибо! Кажется, это вызов JSON.stringify(). Что очень странно, объект был создан из строки JSON ранее с помощью функции JSON.parse(). - person Feanaro; 16.02.2015
comment
Я вижу подобное поведение в своем коде, поэтому хочу спросить: была ли ошибка в data, что вызов JSON.stringify() не работал, или он не работал с передачей правильного data или без него? В конце концов, запись в файл работает, если я использую fs.writeFileSync(file, data), то есть синхронный метод, но мне это уже не нравится. - person Marvin Danig; 07.06.2016
comment
с той же проблемой, обратный вызов никогда не вызывается иногда - person Sohail Faruqui; 28.09.2017

единственное, что я вижу, это то, что в случае сбоя он пытается записать «ошибку» вместо «ошибка»

if(error) {
    console.log('[write auth]: ' + err); //<-this should be "error" and not "err"
person LightWing    schedule 27.05.2018

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

person Faza Aulia Rosyadan    schedule 12.03.2021