从多个callbackjavaScript中返回一个最终对象

我是JavaScript和Node.js的新手。 我想要做的是使用Node的文件stream从两个不同的目录中读取一堆图像和js文件。 我写了一个fileReader.js模块来读取下面的图像和.js文件

var fs = require('fs'); //module to read all the images from the images directory --> either .jpg or .png images and filter out the rest function readImages() { var imageArray = []; fs.readdir('../images',function(err,files) { files.filter(function(file) { return ( (file.substr(-4) === '.png') || (file.substr(-4) === '.jpg') ); }).forEach(function(file) { imageArray.push(file); }); console.log(imageArray); return imageArray; }); //or return here??? } //module to read all the javascript files and filter out non js files function readJSFiles() { var jsArray = []; fs.readdir('../jsfiles',function(err,files) { files.filter(function(file) { return ( (file.substr(-3) === '.js') ); }).forEach(function(file) { jsArray.push(file); }); console.log(jsArray); return jsArray; }); // or return here??? } exports.readImages = readImages; exports.readJSFiles = readJSFiles; 

现在我试图返回两个不同的数组对象的图像列表和其他列表的JS文件。 我想在我的main.js文件中使用这些对象,所以我在下面的main.js中调用它们

 var filereader = require('./fileReader'); var images = filereader.readImages(); var jsfiles = filereader.readJSFiles(); 

但是这些数组对象在main.js文件中是空的。 据我所知,这与callback有关,但我该如何解决这个问题?

您不想为这些asynchronous函数设置返回值。 相反,一旦你的fs方法完成,调用一个callback函数。

 function readImages(callback) { var imageArray = []; fs.readdir('../images',function(err,files){ files.filter(function(file){ return ( (file.substr(-4) === '.png') || (file.substr(-4) === '.jpg') ); }).forEach(function(file){ imageArray.push(file); }); console.log(imageArray); //invoke the function from above callback(imageArray); }); } 

你可以写你的readImages()函数来接受callback函数。 此callback函数将设置您的图像variables指向图像数组。

 //main.js var filereader = require('./fileReader'); var images; filereader.readImages(function(myImagesFromFs){ images = myImagesFromFs; });