在Node.js中,我可以通过readFile()的回调函数为变量赋值吗?

时间:2015-09-25 00:25:21

标签: javascript node.js

CODE1

var fs = require("fs");
fs.readFile(process.argv[2],"utf8",function(err,data){
    if(err)throw err;
    console.log(data.split(/\n/).length-1);
});

码2

var fs = require("fs");
var str;
fs.readFile(process.argv[2],'utf8',function(err,data){
    if(err)throw err;
    str=data;
});
var arr = str.split(/\n/);
console.log(arr.length-1);

大家好,我现在正在学习node.js,上面的代码是读取文件,然后异步计算其换行符的数量。 对于code1,它可以正常工作,但对于code2,str将获得“未定义”值。我不知道它为什么会发生,这是否意味着我不能在回调函数中赋值?或者我还想念别的吗?感谢

1 个答案:

答案 0 :(得分:1)

在读取文件之前执行var arr = str.split(/\n/);。此时str仍然是undefined。回调旨在成为异步过程完成后执行的代码。这允许节点响应,同时(通常)仅具有单个线程。

节点也有一个readFileSync方法,但这通常会违背使用Node的目的,因为整个程序在读取文件时会阻塞。