这是问题。
我有一个名为文件夹的全局变量(数组类型)>
let folders = [];
我在另一个回调函数中的回调函数中修改了它。这是方法。
app.get("/", (req, res) => { // TODO: Proceed only if the path is correct and it is a directory fs.readdir(dir, (err, files) => { console.log("READING:"); if (err) throw err; files.forEach(file => { const add = folder => folders.push(folder); fs.lstat(path.join(dir, file), (err, stats) => { if (err) throw err; if (stats.isDirectory()) { add(file); } console.log("INSIDE: " + folders); }); console.log("OUTSITE: " + folders); }); }); res.send(folders.length.toString()); });
现在的问题是,当我在此行上阅读它时:
打印它时为0,但是当在用INSIDE提及的行上打印它时,它读起来很好。 >经过一番搜寻,我知道了问题所在。发生这种情况是因为回调在事件循环中的稍后时间设置了变量。(如果有任何意义,但是您明白了)。我知道这个问题,但是我不知道如何解决。我尝试了各种实现,包括在数组中添加res.send(folders.length.toString());
长度始终为0。并且在控制台日志行上也用0 [<< [OUTSITE
pushes
的全局函数,并在回调内部将其称为frpm,但结果相同。这是完整的代码。
const express = require("express");
const fs = require("fs");
const path = require("path");
const os = require("os");
// Initialize Express
const app = express();
// PORT on which the app process should be started
const PORT = process.env.PORT || 5100;
// Setting Up the path to Projects folder dynamically
// !Currently only works(tested) on the Darwin(MacOS) systems PS. I don't own a Windows
// TODO: Test on Windowsn and Linux
const homedir = os.homedir();
const dir = `${homedir}/Projects/`;
// TODO: Re-Write using Async/Await as it is not fully suppported as of Node version 10.0
let folders = [];
// Home Route
app.get("/", (req, res) => {
// TODO: Proceed only if the path is correct and it is a directory
fs.readdir(dir, (err, files) => {
console.log("READING:");
if (err) throw err;
files.forEach(file => {
const add = folder => folders.push(folder);
fs.lstat(path.join(dir, file), (err, stats) => {
if (err) throw err;
if (stats.isDirectory()) {
add(file);
}
console.log("INSIDE: " + folders);
});
console.log("OUTSITE: " + folders);
});
});
res.send(folders.length.toString());
});
// Start the express server
app.listen(PORT, err => {
if (err) throw err;
console.log(`Project Lister Running On PORT: ${PORT}`);
});
这是问题。我有一个名为文件夹的全局变量(数组类型)let folder = [];我在另一个回调函数中的一个Callback函数中修改它。这是如何做。 app.get(“ /”,(req,...任何解决方案?
迫不及待完成