Node.js fs模块同步和异步方法的区别

Node.js fs模块同步和异步方法的区别

NodeJS为我们提供了一个内置的 文件系统(fs)模块 ,用于各种文件处理操作,如读取文件、写入文件、删除文件等。可以使用以下语句安装fs模块:

语法:

npm install fs --save

注意: 上述命令中的npm代表node package manager,用于在NodeJS中安装所有的依赖项。

要使用fs模块,请将以下语句附加到代码中:

const fs = require('fs');

fs模块具有不同的文件处理操作,例如读文件,写文件,追加文件,关闭文件,删除文件等。可以根据用户的要求以同步或异步的方式执行所有操作。

1.同步方法: 同步函数在执行文件操作之前会阻塞程序的执行。这些函数也被称为阻塞函数。同步方法的最后一个参数是文件描述符。文件描述符是对已打开文件的引用。它是一个数字或文件的引用ID,在使用fs模块的fs.open()方法打开文件后返回的。所有的异步方法都可以通过将“Sync”附加到函数名称来同步执行。NodeJS中fs模块的一些同步方法如下:

  • fs.readFileSync()
  • fs.renameSync()
  • fs.writeSync()
  • fs.writeFileSync()
  • fs.fsyncSync()
  • fs.appendFileSync()
  • fs.statSync()
  • fs.readdirSync()
  • fs.existsSync()

示例1:同步读取方法

步骤1: 让我们创建一个名为 main.js 的JavaScript文件和一个名为 sample.txt 的文本文件,其中包含以下语句:

GeeksForGeeks is a Computer Science portal.

步骤2: 将以下代码添加到 main.js 文件中并执行:

main.js

var fs = require("fs"); 
  
// Synchronous read 
console.log("Synchronous read method:"); 
var data = fs.readFileSync('sample.txt'); 
console.log("Data in the file is - " + data.toString()); 

输出:

Node.js fs模块同步和异步方法的区别

示例2:同步追加方法

步骤1: 让我们创建一个名为 main.js 的JavaScript文件和一个名为 sample.txt 的文本文件,其中包含以下语句:

Hello World !

步骤2: 将下面的代码添加到 main.js 文件内并执行:

main.js

var fs = require("fs"); 
  
// Synchronous read 
console.log("Synchronous append method:"); 
  
var data = "\nGeeksForGeeks is a Computer Science portal."; 
  
// Append data to file 
fs.appendFileSync('sample.txt', data, 'utf8'); 
console.log("Data is appended to file successfully.") 
  
data = fs.readFileSync('sample.txt'); 
console.log("Data in the file after appending is - \n" + data.toString()); 

输出:

Node.js fs模块同步和异步方法的区别

2. 异步方法:

异步函数不会阻塞程序的执行,每个命令在之前的命令执行完成之后执行,即使之前的命令尚未计算出结果。之前的命令在后台运行,并在处理完成后加载结果。因此,这些函数被称为非阻塞函数。它们将回调函数作为最后一个参数。与同步函数相比,通常更喜欢使用异步函数,因为它们不会阻塞程序的执行,而同步函数会在处理完成之前阻塞程序的执行。在NodeJS的fs模块中有一些异步方法,包括:

  • fs.readFile()
  • fs.rename()
  • fs.write()
  • fs.writeFile()
  • fs.fsync()
  • fs.appendFile()
  • fs.stat()
  • fs.readdir()
  • fs.exists()

对于消耗时间的重型操作,比如从数据库中查询大量数据,应该使用异步方式进行,因为其他操作仍然可以执行,从而减少程序执行的时间。

示例1:异步读取方法

步骤1: 让我们创建一个名为 main.js 的JavaScript文件和一个名为 sample.txt 的文本文件,其中包含以下语句:

GeeksForGeeks is a Computer Science portal.

步骤2: 将以下代码添加到 main.js 文件中并执行:

main.js

var fs = require("fs"); 
    
// Asynchronous read 
console.log("Asynchronous read method:"); 
fs.readFile('sample.txt', function (err, data) { 
   if (err) { 
      return console.error(err); 
   } 
   console.log("Data in the file is - " + data.toString()); 
});

输出:

Node.js fs模块同步和异步方法的区别

示例2:异步追加方法

步骤1: 让我们创建一个名为 main.js 的JavaScript文件和一个名为 sample.txt 的文本文件。该文本文件中包含以下语句:

Hello World !

步骤2:main.js 文件中添加以下代码并执行:

main.js

var fs = require("fs"); 
  
const data = "\nGeeksForGeeks is a Computer Science portal."; 
     
// Asynchronously appending data to file 
fs.appendFile('sample.txt', data, 'utf8', 
    
    // Callback function 
    function(err) {  
        if (err) throw err; 
    
        //  If no error 
        console.log("Data is appended to file successfully.") 
}); 
  
fs.readFile('sample.txt', function (err, data) { 
    if (err) { 
       return console.error(err); 
    } 
    console.log("Data in the file after appending: \n"
        + data.toString()); 
 });

输出:

Node.js fs模块同步和异步方法的区别

异步和同步方法的区别:

编号 同步方法 异步方法
1. 同步函数是阻塞函数 异步函数是非阻塞函数。
2. 它阻塞程序的执行,直到文件操作完成处理。 它不会阻塞程序的执行。
3. 这些函数将文件描述符作为最后一个参数。 这些函数将回调函数作为最后一个参数。
4. 示例:fs.readFileSync()、fs.appendFileSync()、fs.writeFileSync()等。 示例:fs.readFile()、fs.appendFile()、fs.writeFile()、fs.stat()等。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程