在node.js中,我有一个循环文件夹的模块。它实际上有一个函数回调,它在完成从目录读取时触发。但是对于它找到的每个文件,我运行一个readFile命令,它是异步函数,读取文件,并且它也有一个回调函数。问题是,如何设置它以便在目录循环函数完成后还有一个回调以及每个readFile函数?
var klaw = require('klaw');
var fse = require('fs-extra');
var items = [];
klaw("items").on('data', function (item) {
var dir = item.path.indexOf(".") == -1;
// if its a file
if (!dir) {
var filename = item.path;
if (filename.toLowerCase().endsWith(".json")) {
fse.readFile(filename, function(err, data) {
if (err) return console.error(err);
items.push(JSON.parse(data.toString()));
});
}
}
}).on('end', function () {
});
答案 0 :(得分:1)
尝试这样的事情
import Promise from 'Bluebird';
const processing = []
const items = [];
klaw("items")
.on('data', item => processing.push(
Promise.promisify(fs.readFile))(item.path)
.then(content => items.push(JSON.parse(content.toString())))
.catch(err => null)
)
.on('end', () => {
Promise.all(processing)
.then(nothing => console.log(items))
})
或喜欢
const processing = []
klaw("items")
.on(
'data',
item => processing.push(Promise.promisify(fs.readFile)(item.path))
)
.on(
'end',
() => {
Promise.all(processing)
.then(contents => (
contents.map(content =>(JSON.parse(content.toString())))
)
.then(items => console.log(items))
})