繁体   English   中英

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

[英]Script doen't execute a code line - why?

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

NodeJS的主要功能之一是非阻塞事件循环。 当函数花费很长时间时,Node脚本不会等待函数返回,这就是为什么您需要在回调中传递代码的原因。

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

请参阅文档:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM