3

我对此感到困惑,这是我在 nodejs.org的文档中找到的。

它表示rsin 中的标志fs.open()用于以同步模式打开文件以进行读取

它只是让我觉得这是一个异步文件打开,但它正在同步读取?我真的很困惑这一点。

之后,它注意到这不会fs.open()变成同步阻塞调用。如果那是您想要的,那么您应该使用fs.openSync().

fs.open'srsfs.openSync' s 和有什么不一样r

4

1 回答 1

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);
};
于 2013-09-25T04:23:46.080 回答