如何在Node js中管理异步

时间:2015-09-23 03:04:44

标签: javascript node.js asynchronous synchronous

我现在遇到麻烦,我不知道如何使用异步来做这件事。 我有一个文件调用“jsonFileData.js”,这里是:

// jsonFileData.js
var fs = require('fs'),
    Converter = require('csvtojson').Converter,
    csvConverter = new Converter();

function jsonFile(filename) {

    csvConverter.on("end_parsed",function(jsonObj)     
    return jsonObj;
    });
    fs.createReadStream('../csv_parse/' + filename + '.csv').pipe(csvConverter);                                 
}

module.exports = {
    language: jsonFile('language'),
};

另一个文件调用“main.js”

// main.js
var jsonFile = require('./jsonFileData');

console.log(jsonFile.language);

当我运行“main.js”时,它显示为“未定义”。如何制作“var jsonFile = require('./ jsonFileData');”在开始打印结果“jsonFile.language”之前完全运行? 感谢您阅读我的问题。

1 个答案:

答案 0 :(得分:0)

您的异步回调不对。与我在下面所做的更改进行比较。

// jsonFileData.js
var fs = require('fs'),
Converter = require('csvtojson').Converter,
csvConverter = new Converter();

function jsonFile(filename,callback) {

  csvConverter.on("end_parsed",function(jsonObj) {    
    return callback(null, jsonObj);
   });
  fs.createReadStream('../csv_parse/' + filename + '.csv').pipe(csvConverter);                                 
 }

module.exports = {
  language: jsonFile
};

main.js文件中:

// main.js
var jsonFile = require('./jsonFileData');

jsonFile.language('language', function(err, jsonObj){
   if(err){
     console.log(err);
     return;
   }
   console.log(jsonObj);
   console.log("Hello World!"); // Edit based on comment
});