【问题标题】:fs.writeFile() doesn't return callbackfs.writeFile() 不返回回调
【发布时间】:2015-04-17 04:15:27
【问题描述】:

我正在尝试将包含用户身份验证数据的文件写入磁盘。为此,我编写了以下函数:

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 docsfs ,这一切似乎都签了。此外,所有其他异步执行似乎都已停止。

这是我第一次在 nodeJS 中开发一些严肃的东西,所以我在这个环境中的经验并不多。

【问题讨论】:

  • 要非常清楚:“从不调用回调”是指您的 console.log 调用从不运行,还是 success/fail 回调不运行?
  • 其他调用的执行似乎也都停止了。

标签: node.js osx-yosemite appjs


【解决方案1】:

您的代码看起来不错,我复制并粘贴并通过调用writeAuthFile({test: 1}); 运行它,文件auth.json 已创建。 那么,mb错误更高? 在var fs = require('fs'); 行后添加console.log 并进行测试。

【讨论】:

  • 我在var fs = require('fs'); 之后有一个console.log(),它工作得很好。一切似乎都停止了。在writeAuthFile() 电话之后,我做了各种各样的其他事情,现在不会发生。也许它与权限或文件句柄的创建有关。文档说它应该去回调并填充 error 参数。
  • 好的,检查你的data,它包含JSON.stringify 的错误?
  • 非常感谢!这似乎是JSON.stringify() 电话。这很奇怪,对象是通过 JSON.parse() 函数从 JSON 字符串创建的。
  • 我在我的代码中看到了类似的行为,所以想问一下:data 中是否存在 JSON.stringify() 调用不起作用或不起作用的错误还是没有正确的data 被通过?最后,如果我使用fs.writeFileSync(file, data),即同步方法,则写入文件有效,但我已经不喜欢它了。
  • 遇到同样的问题,回调有时不会被调用
【解决方案2】:

我唯一看到的是,如果失败,它会尝试记录“err”而不是“error”

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

【讨论】:

    【解决方案3】:

    如果文件已经存在,则没有参数回调。并且承诺在成功时无需争论即可解决。如果您想检查文件是否已存在,请使用文件句柄的另一个功能然后 writefile.

    【讨论】:

      猜你喜欢
      • 2019-02-12
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 2020-05-28
      • 2017-09-14
      • 1970-01-01
      • 2019-03-14
      • 2021-01-22
      相关资源
      最近更新 更多