脚本不执行代码行 - 为什么?

时间:2012-03-27 08:39:01

标签: javascript node.js

我想编写一个简单的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){}之外编写我的代码?

3 个答案:

答案 0 :(得分:1)

NodeJS的一个主要特性是非阻塞事件循环。当函数需要很长时间时,Node脚本不会等待函数返回,这就是你需要在回调中传入代码的原因。

答案 1 :(得分:0)

如果您需要“阻止行为”,可以使用同步fs方法。

请参阅文档:

http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_encoding

答案 2 :(得分:0)

默认情况下,所有文件系统操作都是非阻塞的,因此结果需要在操作完成时运行的回调函数中使用,在这种情况下,当文件完成读入变量时。

虽然使用非阻塞IO来允许服务器同时运行多个操作通常是更好的设计,但您可以将大多数fs操作切换为同步运行:

var data = fs.readFileSync('list.csv', 'ascii');