首页  >  文章  >  web前端  >  【Node.js】之同步及异步的区别之分

【Node.js】之同步及异步的区别之分

帅杰杰
帅杰杰原创
2020-05-09 21:57:25191浏览

为了使用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)}`);
    });
});

注意:在一个大型的系统中,建议使用异步方法,同步方法将会导致进程被锁死。和同步方法相比,异步方法性能更高、速度更快,而且阻塞更少。

以上是【Node.js】之同步及异步的区别之分的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn