Node.js回调函数

Node.js回调函数

参考https://www.runoob.com/nodejs/nodejs-callback.html

  • Node.js异步编程的直接体现就是回调
  • 异步编程依托于回调来实现,回调!=异步化
  • Node.js所有的API都支持回调函数。

异步函数实现的原理:
1. 在普通函数的最后一个参数传入另一个函数,这个函数就会在当前函数执行完毕后被执行
2. 当前函数的结果可以当作另一个函数的参数,从而处理大量并发请求

阻塞代码实例

准备一个文本文件,例如input.txt,内容如下:
菜鸟教程官网地址:www.runoob.com
创建一个main.js文件,代码如下:

  var fs = require('fs');
  
  var data = fs.readFileSync('input.txt');
  console.log(data.toString());
  console.log('程序执行结束!');

控制台输入node main.js,代码执行结果:

  菜鸟教程官网地址:www.runboo.com
  程序执行结束!

其中,fs模块为Node.js操作文件系统(FileSystem,简称fs)的必要模块(required模块),由于读取文件返回的为一个Buffer对象,所以需要调用该对象的toString()方法,如果不加toString(),结果为:

可以看到由于使用了同步读取文件的函数readFileSync(),程序是按顺序执行的,由于读取文件时发生了阻塞,所以需要等待文件读取操作结束后,才会继续向下执行。

非阻塞代码实例

文本文件还使用上一个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('程序执行结束!');

执行结果:

  程序执行结束!
  菜鸟教程官网地址:www.runoob.com

可以看到,由于使用了异步读取文件的函数readFile(),程序并没有按顺序执行,而是在等待文件读取的同时,就继续向下执行并把'程序执行结束!'打印到了控制台,最后才是执行回调函数中打印读取的文件的部分。

原文地址:https://www.cnblogs.com/pangqianjin/p/14187833.html