最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

从回调函数内部将项目添加到全局数组,然后全局访问它

运维笔记admin6浏览0评论

从回调函数内部将项目添加到全局数组,然后全局访问它

从回调函数内部将项目添加到全局数组,然后全局访问它

这是问题。

我有一个名为文件夹的全局变量(数组类型)>

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());
});

现在的问题是,当我在此行上阅读它时:

res.send(folders.length.toString());

长度始终为0。并且在控制台日志行上也用0 [<< [OUTSITE

打印它时为0,但是当在用INSIDE提及的行上打印它时,它读起来很好。 >经过一番搜寻,我知道了问题所在。发生这种情况是因为回调在事件循环中的稍后时间设置了变量。(如果有任何意义,但是您明白了)。我知道这个问题,但是我不知道如何解决。我尝试了各种实现,包括在数组中添加

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,... 回答如下:异步函数是javascript

迫不及待完成

发布评论

评论列表(0)

  1. 暂无评论