如何将数据从一个功能导出到另一个功能

时间:2019-08-12 13:52:53

标签: javascript node.js

我想从一个函数生成数据,并在另一个函数中使用它。

到目前为止,我已经尝试过:

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

2 个答案:

答案 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');
  })
});