Javascript NodeJS-stat不';我不总是跑步

Javascript NodeJS-stat不';我不总是跑步,javascript,node.js,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

这是我的密码:

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
即使是这样,为什么没有错误或其他什么?如果是这样,我该如何统计这些文件呢?


根据文档,它不应该有第三个参数功能,您没有记录或检查错误
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);
 }
在查看时,有几种方法可以引发同步异常,特别是当它检测到传递给它的无效参数时。与往常一样,node.js文档没有描述这种行为,但您可以在代码中看到它。这是
fs.stat()
的代码:

makeStatsCallback()
handleError()
都会引发异常(当您在同一个文件中查看它们的实现时)



我不知道您是从哪里得到将两个回调传递给
fs.stat()
的想法的。如文档所述,它不接受两个回调函数。它看起来很像
fs
库的预期版本,其中每个异步操作都返回一个承诺,然后您可以将两个回调传递给
fs.statPromise.then(fn1,fn2)
,但我不知道您是否看到了这一点。

您能澄清一下吗?我不确定您告诉我要更改什么。fs.stat(fullName,function(err,stats){console.log(“路径2:+fullName);});添加了有关
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);
};