Javascript 变量意外地被清除

Javascript 变量意外地被清除,javascript,node.js,Javascript,Node.js,我正在实现一个函数来读取本地foo.txt中的内容 var fs = require("fs"); var path = require("path"); var realpath = path.resolve("./foo.txt"); fs.open(realpath, "r", function(err, fd){ if ( err ) { throw err; }; var buf = new Buffer(1024), bufOffset = 0,

我正在实现一个函数来读取本地foo.txt中的内容

var fs = require("fs");
var path = require("path");

var realpath = path.resolve("./foo.txt");

fs.open(realpath, "r", function(err, fd){
    if ( err ) { throw err; };
    var buf = new Buffer(1024),
    bufOffset = 0,
    bufLength = buf.length,
    result = "";

    var recursive = function(position) {
        buf = new Buffer(1024)
        fs.read(fd, 
                buf,
                bufOffset,
                bufLength,
                position,
                function(err, bytesRead, buffer) {
                    if ( err ) { throw new Error("Opps!"); };
                    if (bytesRead > 0) { // Block**
                        result = result.concat( buffer.slice(0, bytesRead).toString() );
                        recursive(bytesRead + position);
                    }
                });
    };

    recursive(0);
    console.log(result);
});

我使用递归方法。执行完这个程序后,我什么都没有得到。但是如果我在上面的**块中使用console.log(result),它就可以工作了。为什么程序返回开放块后结果会被清除?谢谢。

由于
read
方法的异步性质,打印时未填充
result
变量。这就是为完成提供回调的要点。

fs.read
是异步的,就像大多数不以“Sync”结尾的NodeJS方法一样。那么,我可以用什么方式使用外部作用域中的变量在异步函数中执行一些操作呢?您可以使用
readSync
函数,它是
read
的同步版本。