试图了解node.js回调方案

时间:2014-07-21 05:08:27

标签: javascript node.js

function load_file_contents(path, callback) {
    fs.open(path, 'r', function (err, f) {
        if (err) {
            callback(err);
            return;
        } else if (!f) {
            callback(make_error("invalid_handle",
                "bad file handle from fs.open"));
            return;
        }
        fs.fstat(f, function (err, stats) {
            if (err) {
                callback(err);
                return;
            }
            if (stats.isFile()) {
                var b = new Buffer(10000);
                fs.read(f, b, 0, 10000, null, function (err, br, buf) {
                    if (err) {
                        callback(err);
                        return;
                    }

                    fs.close(f, function (err) {
                        if (err) {
                            callback(err);
                            return;
                        }
                        callback(null, b.toString('utf8', 0, br));
                    });
                });
            } else {
                calback(make_error("not_file", "Can't load directory"));
                return;
            }
        });
    });
}


load_file_contents(
    "test.txt",
    function (err, contents) {
        if (err)
            console.log(err);
        else
            console.log(contents);
    }
);

在这段代码中,我不太明白这个“f”来自哪里? 在“fs.open()”之后,有一行

" } else if (!f) {"

这是什么意思,这是来自哪里?

1 个答案:

答案 0 :(得分:1)

f是传递给fs.open()回调的文件描述符,如果该文件能够被打开的话。

 else if (!f) {
     callback(make_error("invalid_handle",
         "bad file handle from fs.open"));
     return;
 }

正在检查文件描述符是否是假的(可能是它正在检查它是否为null或未定义)并且调用函数自己的回调并显示错误。