【问题标题】:Accessing variable from outside of anonymous functions从匿名函数外部访问变量
【发布时间】:2020-08-19 04:15:10
【问题描述】:
我试图能够在 foreach 和 readdir 函数之外获取变量 jsCss 的值。我似乎无法弄清楚。我试图将它推送到一个全局变量,但是当我记录我推送到的数组时,它仍然返回一个空数组。我该怎么做呢?
let items = [];
fs.readdir('.', (err, files) => {
const readable = files.filter((el) => /\.vide$/.test(el));
readable.forEach((script) => {
let data = fs.readFileSync(script, { encoding: 'utf8' });
const dom = htmlparser2.parseDOM(data);
const $ = cheerio.load(dom);
const CSS = $('Vide')
.clone()
.children()
.remove()
.end()
.text();
const str = css(CSS);
let jsCss = JSON.parse(str);
items.push(jsCss);
})
});
console.log(items)
【问题讨论】:
标签:
javascript
node.js
scope
【解决方案1】:
console.log 比 items.push() 更早执行,这就是你看到空数组的原因
这应该可以按您的预期工作
let items = [];
fs.readdir('.', (err, files) => {
const readable = files.filter((el) => /\.vide$/.test(el));
readable.forEach((script) => {
let data = fs.readFileSync(script, { encoding: 'utf8' });
const dom = htmlparser2.parseDOM(data);
const $ = cheerio.load(dom);
const CSS = $('Vide')
.clone()
.children()
.remove()
.end() //again go back to selected element
.text();
const str = css(CSS);
let jsCss = JSON.parse(str);
items.push(jsCss);
});
console.log(items);
});
您也可以使用readdirSync() 省略回调,如下所示:
let items = [];
const files = fs.readdirSync('.');
const readable = files.filter((el) => /\.vide$/.test(el));
readable.forEach((script) => {
let data = fs.readFileSync(script, { encoding: 'utf8' });
const dom = htmlparser2.parseDOM(data);
const $ = cheerio.load(dom);
const CSS = $('Vide')
.clone()
.children()
.remove()
.end() //again go back to selected element
.text();
const str = css(CSS);
let jsCss = JSON.parse(str);
items.push(jsCss);
});
console.log(items);