我正在嘗試創建一個簡單的 JS 函式,它讀取目錄,遍歷該目錄中的所有檔案并將資訊推送到陣列中。所以關于檔案資料的console.logs 確實輸出了正確的資料,但是在newFunc 函式末尾的console.log({response}) 沒有輸出任何東西,來自等待的異步函式的getFileData 也沒有。但是,我也嘗試在呼叫的異步函式上設定超時,這會導致正確的回傳回應(這意味著 JS 不會等待我的檔案讀取完成它的作業)。
上面提到的功能:
const newFunc = async () => {
let response: any = [];
fs.readdir("files", function (err, files) {
if (err) {
console.error("Could not list the directory.", err);
process.exit(1);
}
for (const file of files) {
fs.stat(`files/${file}`, (err, stats) => {
if (err) {
throw err;
}
// print file information
console.log(`File Data Last Modified: ${stats.mtime}`);
console.log(`File Status Last Modified: ${stats.ctime}`);
console.log(`File Status Last Modified: ${stats.size}`);
console.log({ file });
response.push({
fileName: file,
updatedAt: stats.mtime,
createdAt: stats.ctime,
size: stats.size,
});
});
}
});
console.log({ response });
return response;
};
NodeJS 端點功能:
const getFileData = await newFunc();
console.log({getFileData})
res.status(200).json(getFileData);
uj5u.com熱心網友回復:
你應該使用readdirSync和statSync函式。這樣,代碼將等待函式呼叫的回應。目前,由于fs.readdir和fs.stat方法的異步性質,代碼不會等待并記錄空回應陣列,同時也回傳空回應。
您的 newFunc 方法應如下所示:
const newFunc = async () => {
let response: any = [];
try {
const files = fs.readdirSync('files');
for (const file of files) {
const stats = fs.statSync(`files/${file}`);
console.log(`File Data Last Modified: ${stats.mtime}`);
console.log(`File Status Last Modified: ${stats.ctime}`);
console.log(`File Status Last Modified: ${stats.size}`);
console.log({ file });
response.push({
fileName: file,
updatedAt: stats.mtime,
createdAt: stats.ctime,
size: stats.size,
});
}
}
catch(err) {
console.log(err);
throw err;
}
return response;
}
uj5u.com熱心網友回復:
readdir是一個異步操作,所以看起來newFunc你正在回傳response不等待實際目錄被讀取的值。因此,您可以使用readdirSync代替,readdir或者您可能只是await在當前實作中在fs.readdir呼叫前添加一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/507711.html
標籤:javascript 节点.js 文件系统
上一篇:畫布元素上的邊框半徑
