fs.readFile 跟踪解读 Posted on 2015-12-18 | In Node fs.readFile = function(path, options, callback_) { var callback = maybeCallback(arguments[arguments.length - 1]); if (!options || typeof options === 'function') { options = { encoding: null, flag: 'r' }; } else if (typeof options === 'string') { options = { encoding: options, flag: 'r' }; } else if (typeof options !== 'object') { throwOptionsError(options); } var encoding = options.encoding; assertEncoding(encoding); var flag = options.flag || 'r'; if (!nullCheck(path, callback)) return; var context = new ReadFileContext(callback, encoding); context.isUserFd = isFd(path); // file descriptor ownership var req = new FSReqWrap(); req.context = context; req.oncomplete = readFileAfterOpen; if (context.isUserFd) { process.nextTick(function() { req.oncomplete(null, path); }); return; } binding.open(pathModule._makeLong(path), stringToFlags(flag), 0o666, req);}; 重点callback 未跟踪到