我对此感到困惑,我在nodejs.org的document找到了。
它表示rs
中的fs.open()
标志用于打开文件以便以同步模式进行读取。
它只是让我觉得这是一个异步文件打开但它正在进行同步读取?我真的很困惑这一点。
之后,它注意到此未将fs.open()
变为同步阻止调用。如果这是您想要的,那么您应该使用fs.openSync()
。
fs.open
的{{1}}和rs
的{{1}}有什么区别?
答案 0 :(得分:4)
不同之处在于一个函数需要回调。回调被传递给低级绑定,因此无论您传递给它的标志如何,该函数都将是异步的,因此文档说明标志“不会将fs.open()
变为同步阻塞调用“。举个例子:
var fs = require('fs');
var file = './file';
// fd will always be defined
var fd = fs.openSync(file, 'r');
// fd is undefined because the function returns a
// binding, and the actually fs is passed in a callback
var fd = fs.open(file, 'rs');
如果我们不将回调传递给异步函数,则该方法的结构不会返回结果文件描述符。这就是两个函数的来源:
fs.open = function(path, flags, mode, callback) {
callback = makeCallback(arguments[arguments.length - 1]);
mode = modeNum(mode, 438 /*=0666*/);
if (!nullCheck(path, callback)) return;
binding.open(pathModule._makeLong(path), stringToFlags(flags), mode, callback);
};
fs.openSync = function(path, flags, mode) {
mode = modeNum(mode, 438 /*=0666*/);
nullCheck(path);
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
};