变量意外清除

时间:2013-07-27 02:01:00

标签: 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,
    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);
});

我使用了递归方法。执行这个程序后,我一无所获。但是如果我在上面的Block **中使用console.log(result),它就可以了。为什么在程序返回打开块后结果会被清除?感谢。

1 个答案:

答案 0 :(得分:1)

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