zoukankan      html  css  js  c++  java
  • 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(),程序并没有按顺序执行,而是在等待文件读取的同时,就继续向下执行并把'程序执行结束!'打印到了控制台,最后才是执行回调函数中打印读取的文件的部分。

  • 相关阅读:
    测试候选区
    This is my new post
    发布到首页候选区
    nb
    []
    隐藏列(gridview遍历)
    交叉表、行列转换和交叉查询经典
    数据库设计中的14个技巧
    jQuery操作表格,table tr td,单元格
    不愿将多种编程语言杂糅在一起?可能你还没意识到而已
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14187833.html
Copyright © 2011-2022 走看看