我有一个函数来获取文件加载的内容并将其放置在数组中。我需要在调用该函数的函数中引用该数组。我在调用函数中有一个回调,但是没有被调用。
有什么建议吗? (出于说明目的,我需要在数组上进行2次控制台日志调用。第一个在我的回调内部,从未被调用,第二个在其外部,并且毫不奇怪地显示了一个空数组。)
const fs = require('fs');
const path = require('path')
const chai = require('chai');
const chaiExpect = chai.expect;
const logger = require('../../../../app/logger/winston');
const pageFolder = 'app/views/pages';
let pages = [];
fdescribe('html pages', function () {
buildPages(function () {
console.log(pages);
});
console.log(pages)
})
function buildPages() {
filewalker(pageFolder, function (err, pageList) {
if (err) {
throw err;
}
pageList.forEach(function (file) {
if (!fs.file.isDirectory) {
fs.readFileSync(file.substring(39), 'utf8', function (err, pageContents) {
if (err) throw err;
pages.push({ file: file.substring(39), page: pageContents })
})
}
})
});
}
答案 0 :(得分:0)
您应传递回调并调用buildPages
const fs = require('fs');
const path = require('path')
const chai = require('chai');
const chaiExpect = chai.expect;
const logger = require('../../../../app/logger/winston');
const pageFolder = 'app/views/pages';
let pages = [];
fdescribe('html pages', function () {
buildPages(function () {
console.log(pages);
});
console.log(pages)
})
function buildPages(cb) {
filewalker(pageFolder, function (err, pageList) {
if (err) {
throw err;
}
pageList.forEach(function (file) {
if (!fs.file.isDirectory) {
fs.readFileSync(file.substring(39), 'utf8', function (err, pageContents) {
if (err) throw err;
pages.push({ file: file.substring(39), page: pageContents })
})
}
})
cb(); // <--- HERE
});
}
答案 1 :(得分:0)
您正在调用带有函数参数的buildPages
函数,甚至认为您没有将其配置为接受任何参数。这就是为什么内部函数不会被调用的原因。
只需在buildPages
中添加一个回调函数作为参数,并在完成buildPages
中的所有任务后调用该回调函数
const fs = require('fs');
const path = require('path')
const chai = require('chai');
const chaiExpect = chai.expect;
const logger = require('../../../../app/logger/winston');
const pageFolder = 'app/views/pages';
let pages = [];
fdescribe('html pages', function () {
buildPages(function () {
console.log(pages);
});
console.log(pages)
})
function buildPages(callback) {
filewalker(pageFolder, function (err, pageList) {
if (err) {
throw err;
}
pageList.forEach(function (file) {
if (!fs.file.isDirectory) {
fs.readFileSync(file.substring(39), 'utf8', function (err, pageContents) {
if (err) throw err;
pages.push({ file: file.substring(39), page: pageContents })
})
}
})
callback();
});
}
但是我强烈建议您是否要从另一个函数中获取一些数据。不要使用全局变量,因为您的代码很难维护您添加到其中的更多内容,而是将数据作为参数传递。
function functionWithResult(callback) {
setTimeout(() => {
var result = [1,2,3,4,5]
callback(result)
}, 1000)
}
functionWithResult(function(result) {
console.log(result)
});