我想编写一个简单的NodeJS应用程序,它读取文件,逐个分析其行并写入结果。以下是适用的代码示例
var lines;
var fs = require('fs');
var data="";
fs.readFile('list.csv', 'ascii', function(err,data){
if(err) {
console.error("Could not open file: %s", err);
process.exit(1);
}
var data2=data.split(/[\n\r]+/);
for(var i=0; i<data2.length; i++){
/*LISTING ALL THE LIST LINE-BY-LINE */
console.log(i + data2[i]);
}
});
我想知道为什么我应该在function(err,data){..*my-code*..}
内编写代码?我试图将所有变量声明为全局变量并写入
console.log();
在代码的末尾 - 似乎它不会执行此代码行。那么,为什么我不能在function(err,data){}
之外编写我的代码?
答案 0 :(得分:1)
NodeJS的一个主要特性是非阻塞事件循环。当函数需要很长时间时,Node脚本不会等待函数返回,这就是你需要在回调中传入代码的原因。
答案 1 :(得分:0)
答案 2 :(得分:0)
默认情况下,所有文件系统操作都是非阻塞的,因此结果需要在操作完成时运行的回调函数中使用,在这种情况下,当文件完成读入变量时。
虽然使用非阻塞IO来允许服务器同时运行多个操作通常是更好的设计,但您可以将大多数fs
操作切换为同步运行:
var data = fs.readFileSync('list.csv', 'ascii');