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