區別在於一個函數需要回調。該回調被傳遞給一個低級別的綁定,因此無論您傳遞給它的標誌如何,該函數都將是異步的,因此文檔聲明該標誌「不會將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);
};
THX,我知道了,但我仍然感到困惑與'fs.open'的''rs''標誌'讀打開文件在同步模式下。因爲它使我認爲這是一個「異步文件打開」,但它正在執行「同步讀取」?我真的很困惑這一點。 – Lellansin
rs標誌告訴操作系統同步打開文件,但該函數使用回調操作,所以它仍然是一個異步函數。 – hexacyanide
非常感謝=) – Lellansin