节点异步 module.export 未定义

node async module.export undefined

我有一个 async waterfall 的文件 这需要一个包含 JSON 个文件的目录,并将它们组合成一个对象并导出该对象以供第二个文件使用

var fs = require('fs');
var path = require('path');

var itemsDir = './data/';
var async = require('async');

function readDirectory(callback){
    console.log("reading directory");
    fs.readdir(itemsDir, function(err, files){
        if(err){
            callback(err);
        }
        console.log("calling back with directory array", files);
        return callback(null, files);
    });
}

function sortFiles(files,callback){
    console.log("sorting files", files);
    async.map(files, function(file, cb){
        console.log("sorting a single file, ", file);
        if(path.extname(file) === '.json'){         
            return cb(null,file);
        }   
    },
    function cb(err, results){
        console.log("returning files", files);
        callback(null, results);
    }); 
}

function buildItemList(jsonFiles, callback){
    console.log("building item list", jsonFiles);
    var itemList = {};
    jsonFiles.forEach(function(file){
        var data = require(itemsDir+file);  
        var keys = Object.keys(data);               
        itemList[keys] = data[keys[0]]; 
        console.log("building item list found data:", keys);        
    });     
    console.log("building item list returning data:", itemList);

    return callback(null, itemList);    
}

function getItemList(cb){
    async.waterfall([
            readDirectory,
            sortFiles,
            buildItemList
        ],
        function(err, results){
            if(err){
                throw err;
            }
            console.log("finished async function");
            cb(results);
        }
    );  
}

getItemList(function(results){
    console.log("exporting results", results);
    module.exports = results;
});

我的问题是什么时候 var items = require('filename.js')

我从 require 而不是项目数组

得到 {}

第一个文件正在按预期创建对象并正确流动,只需要将其清空

请注意,对 module.exports 的分配必须立即完成。它不能在任何回调中完成。

module.exports.getItemList = function(cb) {
    async.waterfall([
        readDirectory,
        sortFiles,
        buildItemList
    ], function(err, results) {
        if (err) {
            throw err;
        }
        console.log("finished async function");
        cb(results);
    });
}

//  in other file
var items = require('filename.js');

items.getItemList(function(results) {
    var newarray = results;
});