为了使用Node.js进行文件操作,首先要使用require('fs')来加载文件系统模板。异步方法的最后一个参数是一个完整的回调函数(callback函数)。传递给回调函数的参数一般取决于这个方法本身,但是第一个参数永远是异常(err)。如果方法执行成功,第一个参数将会是null或undefined。当使用同步方法来执行时,任何异常都会立刻引发。我们可以使用try或者catch来处理异常并将错误信息显示出来。
给出一个异步方法的例子,其中tmp文件夹下有一个hello文件。
此代码将删除tmp目录下的hello文件,如果删除成功,就在console中打印成功删除的信息。
引入fs模块 const fs=require("fs"); //异步操作读取文件 fs.unlink('./tmp/hello',(err)=>{ if(err) throw err; console.log('成功删除hello文件'); });
同样也可以使用异步的方法实现相同的功能。
引入fs模块 const fs=require("fs"); //同步操作读取文件 fs.unlinkSync('./tmp/hello'); console.log('成功删除hello文件');
异步操作的方法不能保证一定执行成功,所以文件操作的顺序在代码执行过程中是非常重要的。
如:下面的代码将会引发一个错误
//重命名hello文件为world文件 fs.rename('./tmp/hello','./tmp/world',(err)=>{ if(err) throw err; console.log('renamed complete'); }); //获取world文件的信息 fs.stat('./tmp/world',(err)=>{ if(err) throw err; console.log(`stats:${JSON.stringify(stats)}`); });
fs.stat将在fs.rename之前执行,正确的方法是使用回调函数来执行。
以下是正确使用回调函数来处理程序执行过程中的异常:
fs.rename('./tmp/hello','./tmp/world',(err)=>{ if(err) throw err; fs.stat('./tmp/world',(err,stats)=>{ if(err) throw err; console.log(`stats:${JSON.stringify(stats)}`); }); });
注意:在一个大型的系统中,建议使用异步方法,同步方法将会导致进程被锁死。和同步方法相比,异步方法性能更高、速度更快,而且阻塞更少。
Atas ialah kandungan terperinci 【Node.js】之同步及异步的区别之分. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!