我想从一个函数生成数据,并在另一个函数中使用它。
到目前为止,我已经尝试过:
1.返回对象
2.将对象推入数组
3.遍历对象并推送到数组
4.将变量加载到函数定义中。
功能A:读取目录中的文件
const directoryPath = path.join(__dirname, '../views/mtemp');
function list(param){
fs.readdir(directoryPath, function (err, files) {
if (err) {
console.log(err);
}
files.forEach(function (file) {
param.push(file);
});
});
console.log(param);
}
功能B:Express-Router
router.get('/', function(req, res, next) {
var param = [];
list(param);
console.log(param);
res.render('task');
});
功能A:通过目录解析列表中的文件。 功能B:Express-router
我想显示目录而不嵌套Func。 A成Func。 B
答案 0 :(得分:1)
从功能中做出承诺,然后将其导出并导入
文件foo.js
const {promisify} = require('util');
const {readdir} = require('fs');
const readAsync = promisify(readdir);
module.exports = (path) => readAsync(path);
bar.js文件
const reader = require('./foo');
reader('./').then(e => {
console.log(e);
});
或者在您的文件中
router.get('/', async function(req, res, next) {
const list = await reader('./');
console.log(list);
res.render('task');
});
请勿使用其他答案中建议的fs.readdirSync。
答案 1 :(得分:0)
fs.readdir
是异步的。
您可以将其包装在Promise中,也可以使用fs.readdirSync
function list(){
return new Promise((res, rej) => {
fs.readdir(directoryPath, function (err, files) {
if (err) {
return rej(err)
}
return res(files)
});
});
}
router.get('/', function(req, res, next) {
list().then( res => {
console.log(res);
res.render('task');
})
});