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

帅杰杰
Lepaskan: 2020-05-13 16:00:11
asal
186 orang telah melayarinya

为了使用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文件');
});
Salin selepas log masuk

同样也可以使用异步的方法实现相同的功能。

引入fs模块
const fs=require("fs");
//同步操作读取文件
fs.unlinkSync('./tmp/hello');
console.log('成功删除hello文件');
Salin selepas log masuk

异步操作的方法不能保证一定执行成功,所以文件操作的顺序在代码执行过程中是非常重要的。

如:下面的代码将会引发一个错误

//重命名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)}`);
});
Salin selepas log masuk

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)}`);
    });
});
Salin selepas log masuk

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

Atas ialah kandungan terperinci 【Node.js】之同步及异步的区别之分. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
1
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan