此方法的回调函数优先级最高,会在事件循环之前被调用。
如果你希望异步任务尽可能早地执行,那就使用 process.nextTick。 const fs = require(“fs”) function readFile(fileName, callback) { if (typeof fileName !== “string”) { return callback(new TypeError(“filename 必须是字符串类型“)) } fs.readFile(filename, function (err, data) { if (err) return callback(err) return callback(null, data) }) } 此段代码的问题在于 readFile 方法根据传入的参数类型,callback 可能会在主线程中直接被调用, callback 也可能在事件循环的 IO 轮询阶段被调用,这可能会导致不可预测的问题发生。如何使 readFile 方法变成完全异步的呢? const fs = require(“fs”) function readFile(fileName, callback) { if (typeof fileName !== “string”) { return process.nextTick(callback, new TypeError(“filename 必须是字符串类 型“)) } fs.readFile(fileName, (err, data) => { if (err) return callback(err) return callback(null, data) }) } 经过以上更改以后,无论 fileName 参数是否是字符串类型,callback 都不会在主线程中直接被调 用。