我有一个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
第一个文件正在按预期创建对象并正确地流动,只需要它使其为空
答案 0 :(得分:2)
请注意,必须立即完成对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;
});