您還沒有登錄或檢查錯誤。 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版本,其中每個異步操作都會返回一個承諾,然後您可以將兩個回調傳遞給fs.statPromise.then(fn1, fn2)
,但我不知道這是否是您看到的。
添加了更多關於'fs.stat()'如何拋出異常的信息。 – jfriend00