javascript - 尝试理解node.js回调方案

标签 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) {"

这是什么意思,这个f从哪里来?

最佳答案

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

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

正在检查文件描述符是否为假(大概是在检查它是否为空或未定义)并调用函数自己的回调并出现错误。

关于javascript - 尝试理解node.js回调方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24858048/

相关文章:

javascript - Vue.js 没有设置数据对象数组中声明的属性

node.js - 如何让服务器上传并为您的游戏工作?

javascript - 如何在 Quasar 版本 ^0.14 中通过按钮创建 url 链接

javascript - 安装@react-navigation/stack@5.14.3 时无法解析依赖树

Javascript 使用 getElementsByClassName 删除禁用属性

javascript - Bootstrap - 工具提示中断 td 样式

node.js - 如何在 MongoDB 查询中使用正则表达式变量

node.js - 扩展事件定义 - 接口(interface)错误地实现了接口(interface)

C# Rfc2898DeriveBytes 到 Node

javascript - Node.js Express router.post 返回 404 未找到