NodeJS - stat并不总是运行

时间:2017-07-25 23:20:50

标签: javascript node.js

这是我的代码:

console.log("Path 1: " + fullName);
fs.stat(fullName, function(err, stats) {
 console.log("Path 2: " + fullName);
}, function(err) { // I don't know if this part actually does something
  console.log("An error occurred: " + err); // but I saw it in a different SO answer
});

代码根本不会针对某些文件运行。在,我的日志将显示路径1与文件,但不显示路径2与文件,也没有“发生错误”。我想也许这些文件的字符无效,因为它们都有相同的符号。它们看起来像这样:

   ...file.device_type=mobile.jsx

即使是这样,为什么没有错误或什么?如果是这样,我怎么能实际统计这些文件?

2 个答案:

答案 0 :(得分:2)

您没有记录或检查错误。 fs.stat()仅接受两个参数,即文件名和回调函数。您正在传递三个参数,即文件名和两个单独的回调。所以第二次回调是错误的。然后,在第一个回调中,您需要检查err变量以查看是否发生了错误。

这是正确的用法:

fs.stat(fullName, function(err, stats) {
    if (err) {
        console.log("Error in fs.stat(): ", err);
    } else {
        console.log("Got stats: ", stats);
    }
});

如果你正在使用这个正确的表格而你仍然没有在控制台中看到任何一条消息,那么我建议在它周围放置一个异常处理程序以查看是否还有其他内容:

try {
    console.log("about to call fs.stat()");
    fs.stat(fullName, function(err, stats) {
        if (err) {
            console.log("Error in fs.stat(): ", err);
        } else {
            console.log("Got stats: ", stats);
        }
    });
 } catch(e) {
    console.log("fs.stat() exception: ", e);
 }

在查看source code for fs.stat()时,有几种方法可以抛出同步异常,特别是如果它检测到传递给它的无效参数。像往常一样,node.js文档没有描述该行为,但您可以在代码中看到它。这是fs.stat()的代码:

fs.stat = function(path, callback) {
  callback = makeStatsCallback(callback);
  if (handleError((path = getPathFromURL(path)), callback))
    return;
  if (!nullCheck(path, callback)) return;
  var req = new FSReqWrap();
  req.oncomplete = callback;
  binding.stat(pathModule._makeLong(path), req);
};

makeStatsCallback()handleError()都可以抛出异常(当你在同一个文件中查看它们的实现时)。

我不知道你将两个回调传递给fs.stat()的概念。如记录here,它不接受两个回调函数。它看起来像fs库的一个promisified版本,每个异步操作返回一个promise,然后你可以将两个回调传递给fs.statPromise.then(fn1, fn2),但我不知道你看到的是哪个这个与否。

答案 1 :(得分:0)

https://nodejs.org/api/fs.html#fs_fs_stat_path_callback 根据文档,它不应该具有第三个参数函数