编程语言
首页 > 编程语言> > javascript-Node.js:回调中变量范围的问题

javascript-Node.js:回调中变量范围的问题

作者:互联网

var result = { controllers: [], views: [], models: [] };
var dirs = ['controllers', 'views', 'models'];

dirs.forEach(function(dirname) {
    fs.readdir('./' + dirname, function(err, res) {
        if (err) throw err;
        result[dirname] = res;
        // #2
    });
});

// #1

在这段代码中,具有console.log(result);运行在#1(请参见上文)上,将记录初始化时空的控制器,视图和模型数组.但是,我需要循环以通过fs读取的相应文件名填充数组.

console.log(result);在#2处将记录第三次迭代后填充有所需值的结果对象.

我相信这与Node.js / JavaScript回调的异步特性有关.如果我不了解JavaScript变量作用域和异步方法的工作原理,请原谅我,这是我的新手.

解决方法:

这样做:

var result = { controllers: [], views: [], models: [] };
var dirs = ['controllers', 'views', 'models'];
var pending = 0;

dirs.forEach(function(dirname) {
    pending++;
    fs.readdir('./' + dirname, function(err, res) {
        pending--;
        if (err) throw err;
        result[dirname] = res;
        if (pending===0) goOn();
    });
});
function goOn() {
    // #1
}

标签:node-js,callback,javascript
来源: https://codeday.me/bug/20191208/2088791.html