【问题标题】:Bug in custom fs.readfile callback function to return on SUCCESS or ERROR自定义 fs.readfile 回调函数中的错误以返回 SUCCESS 或 ERROR
【发布时间】:2019-09-23 20:39:21
【问题描述】:

我正在尝试在 fs.readFile 函数上实现装饰器。而不是常规的错误和数据参数,这个版本应该接受两个回调作为参数(都在文件名之后)——一个在成功时调用,一个在失败时调用。两个回调都只有一个参数(从文件中读取的数据或错误对象)。实际的实现只是调用 fs.readFile。

我无法弄清楚为什么这不起作用,以及我做错了什么。请帮我调试一下。谢谢。

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

【问题讨论】:

  • 您能否显示或包含错误或解释它如何不工作会更好。

标签: javascript io fs


【解决方案1】:

fs.readFile 回调不返回 errorFn 或 successFn。

来自 Node.js fs 文档的示例:

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) return errorFn(err);
    return successFn(data);
  });
}

或者你可以像这样把它变成一个 Promise:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-11-17
  • 2014-06-07
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
相关资源
最近更新 更多