nodejs 是一个基于事件驱动和非阻塞异步的JavaScript运行时环境。
Node.js 采用单线程模型, 单线程意味着 Node.js 在任何给定时刻只能执行一段代码,但通过异步执行回调函数,可以在等待 I/O 操作完成的同时继续执行其他代码,从而提高了并发处理能力和性能。
非阻塞异步:在nodejs中执行的动作不会阻塞后续代码的执行。要实现这样的能力主要依靠3种方法:
- 使用异步 I/O 操作来处理文件读写、网络请求:在等待 I/O 操作完成的同时执行其他任务。如文件读取等。
- 使用回调函数或者 Promise 对象,在异步操作完成后执行特定的回调函数。
回调函数:在 Node.js 中,几乎所有的 API 都是支持回调函数的。一般作为函数的最后一个参数出现。操作完成时调用该回调函数来处理结果。
function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }
// input.txt 文件
//main.js
var fs = require("fs");
// 读取文件结束后回调函数打印文件里的内容。
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log("程序执行结束!");
执行
在这个示例中,fs.readFile
函数用于异步地读取名为 input.txt
的文件。在回调函数中处理文件读取完成后的数据。在调用 fs.readFile
的同时,后续的 console.log
语句会立即执行,而不需要等待文件读取操作完成。
这种异步模式允许 Node.js 在执行 I/O 操作时继续处理其他任务,而不会被阻塞,从而提高了应用程序的性能和响应速度。
使用fs.readFile
时,你需要提供文件的路径作为第一个参数。这个路径可以是相对路径(相对于当前工作目录)或绝对路径(完整路径)。
举个例子
'input1.txt'
是相对于当前工作目录的文件路径,但是在main.js 所在的目录中并没有input1.txt 文件,因此会报错:找不到文件。
如果要读取其他目录中的文件,可以提供相对路径或绝对路径: