如何从fs.accessAsync返回一个值

时间:2018-06-14 03:51:26

标签: javascript node.js fs

我正在尝试检查特定文件。文件夹或目录是否可供阅读。我使用了以下发布的代码。代码有效,但我想 知道以下内容:

1-何时会打印错误信息?例如,文件不存在时会打印吗?我尝试了一个不存在的文件,但错误信息是 从未打印过。

2-如何从fs.accessSync()返回一个值?例如,如果文件可以读取,我会返回1,否则返回0。 如代码所示,我试图返回1,但随后控制台打印“未定义”。

请提供问题的答案

const d = fs.accessSync(path, fs.constants.R_OK, (err) => {
if (err) {
console.log('is not readable is readable________________');
}

return 1;
});

console.log(d);

2 个答案:

答案 0 :(得分:0)

根据nodejs文档,fs.accessSync不支持回调,你必须使用try catch

try {
  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);
  console.log('can read/write');
} catch (err) {
  console.error('no access!');
}

答案 1 :(得分:0)

问题在于您尝试使用accessSync,就像它是异步方法一样。

fs.access有一个异步方法和一个同步方法:

同步方法 - https://nodejs.org/api/fs.html#fs_fs_accesssync_path_mode

这是您应该使用accessSync

的方式
const checkPermissions = file => {
  try {
    fs.accessSync(file, fs.constants.R_OK);
    console.log('can read/write');
    return true;
  } catch (err) {
    console.error('is not readable is readable________________');
    return false;
  }
};

if (checkPermissions('./some/location/file.pdf')) {
  console.log('I have permissions to the file');
} else {
  console.error('I do NOT have permissions to the file');
}

异步方法 - https://nodejs.org/api/fs.html#fs_fs_access_path_mode_callback

回调是一种传递给函数的方法,作为稍后要执行的参数。它是node.js的核心部分,我强烈建议阅读它。节点社区已经转向承诺并且现在异步/等待,但是仍然很重要(在我看来)了解回调如何工作以真正理解promises或async / await的新语法。