【发布时间】:2015-09-23 03:04:44
【问题描述】:
我现在遇到了麻烦,我不知道如何使用异步来执行此操作。 我有一个名为“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”之前完全运行? 感谢您阅读我的问题。
【问题讨论】:
-
请注意,您的
jsonFile函数没有返回值。这就是模块未定义的原因。 -
这种类型的问题在这里每天至少被问 10 次。我建议您对“async node.js return”进行一些搜索,然后阅读数百个答案和文章中的一些。简短的回答是,异步回调在未来某个时间被调用,而其他同步代码继续运行。因此,您可以使用异步函数结果的唯一位置是在回调中表示其完成。如果值是异步获取的,则不能将您的函数视为同步并返回该值。
-
此外,您需要了解回调函数中的
return语句仅从该回调返回,并且该返回值返回到异步操作的内部,而不是返回到您的任何代码.它不会从外部函数返回。 -
是的,谢谢大家帮助我。但我找到了使用“bluebird”和“then”来治疗这个问题的方法。但它适合使用它吗?因为我尝试使用它,但它遇到了麻烦。你的想法如何?
标签: javascript node.js asynchronous synchronous