我是新使用承诺蓝鸟在nodeJS。
我希望将特定目录中的所有CSV文件读入1个JSON对象数组,并显示结果。
这些步骤是:
如果所有的检查都按计划进行,我把console.log放在代码之间。问题是流程没有按照正确的顺序完成。我试着使用蓝知更鸟,但它仍然没有按照计划进行。
请你帮我处理这件事好吗?
这就是我的输出:
输出:load\Book1.csv
输出:load\Book2.csv
输出:load\Book3.csv
结果:{}
load\Book1.csv 101
负载\Book2.csv 102
load\Books.csv 103
正如您所看到的,行输出“结果”应该是最后一个,但是在data_Warehouse对象数组为空的过程中,这是在前面。
var Converter = require("csvtojson").Converter;
var converter = new Converter({});
var _ = require('lodash');
var r = require('rethinkdbdash')(config.rethinkdb);
var fs = Promise.promisifyAll(require('fs'));
readDir()
.then(function(v){
var data_Warehouse={};
_.forOwn(v, function(index){
console.log('output:' + index);
_.assign(data_Warehouse, readFile(index));
});
return mine;
}).then(function(w){
console.log('Results:' + w.length);
})
function readDir() {
return fs.readdirAsync(dir).map(function (fileName) {
var path = Path.join(dir, fileName);
return fs.statAsync(path).then(function(stat) {
return stat.isDirectory() ? readDir(path) : path;
});
}).reduce(function (a, b) {
return a.concat(b);
}, []);
}
function readFile(fileName){
var converter = new Converter({});
fs.createReadStream(fileName).pipe(converter);
converter.on("end_parsed", function (jsonArray) {
console.log(fileName + ' ' + jsonArray[0].Order_ID);
return jsonArray;
})
}我更改了现在能够读取指定目录中的所有文件并以正确的顺序显示结果的代码(使用promisifyAll),但现在问题是使用csvtojson在每个文件上将读取的数据转换为json。它会显示“完成.”在console.log之前(“结果:”+ resultTicker.Order_ID);(见下面的输出)。
var join = Promise.join;
var fs = Promise.promisifyAll(require("fs"));
var Converter = require("csvtojson").Converter;
var Promise = require('bluebird');
var dir='./load/';
fs.readdirAsync(dir).map(function(fileName) {
var contents = fs.readFileAsync(fileName).catch(function ignore() {});
return join(fileName, contents, function(fileName, contents) {
return {
fileName: fileName,
contents: contents
}
});
}).each(function(file) {
console.log('File Name: ' + file.fileName + '\n');
console.log('output: ' + file.contents + '\n');
var converter = new Converter({});
var temp = file.contents.toString();
var tmp;
converter.on("end_parsed", function() {});
converter.fromString(temp, function(err, result){
tmp = result;
for(var Ticker in result){
console.log('results: ' + result[Ticker].Order_ID);
}
});
console.log('___________________');
return tmp;
}).then(function(contents) {
console.log('Done.............');
})我的输出现在是:
文件名: Book1.csv
输出: Order_ID,数量,价格,日期,备注
123,1000,12.95,10/8/2015,测试786,100,7.95,11/6/2015,test2
文件名: Book2.csv
输出: Order_ID,数量,价格,日期,备注
4526,800,2.95,4/1/2015,test3 129,10,3.66,1/23/2014,test4
已订立.
结果: 123
结果: 786
结果: 4526
结果: 129
我如何使转换器csvtojson回到正确的顺序,这样做.是在过程的尽头吗?
编辑:
现在,我已经提出了csvtojson,但由于某种原因,它不起作用。
var join = Promise.join;
var fs = Promise.promisifyAll(require("fs"));
var Converter = require("csvtojson").Converter;
var Promise = require('bluebird');
var dir='./load/';
jsons= function(data){
var converter = new Converter({});
var output;
converter.on("end_parsed", function() {});
converter.fromString(data, function(err, result){
for(var Ticker in result){
console.log('results: ' + result[Ticker].Ticker);
}
output = result;
});
return output;
};
var conversionJsons = Promise.promisifyAll(jsons);
fs.readdirAsync(dir).map(function(fileName) {
var contents = fs.readFileAsync(fileName).catch(function ignore() {});
return join(fileName, contents, function(fileName, contents) {
return {
fileName: fileName,
contents: contents
}
});
}).each(function(file) {
console.log('File Name: ' + file.fileName + '\n');
console.log('output: ' + file.contents + '\n');
console.log('___________________');
var temp = file.contents.toString();
conversionJsons(temp).then(function(result){ // <----Error here for then
console.log("results are: "+ result);
return result;
});
}).then(function(contents) {
console.log('Done.............');
})我得到以下错误:
“无法读取未定义的属性‘那时’”
你能帮我解决这个问题吗?
https://stackoverflow.com/questions/37870414
复制相似问题