zoukankan      html  css  js  c++  java
  • Node回调&事件

    Node回调&事件

    Node.js 异步编程的直接体现就是回调,异步编程依托于回调来实现

    简介

    回调函数在任务完成后会被调用,node的所有API都支持回调函数,回调函数提高了Node的性能,可以处理大量的并发请求

    举例

    var fs = require("fs");
    // 同步读取
    var data = fs.readFileSync("input.txt");
    console.log(data.toString());
    console.log("同步读取");
    
    // 异步读取
    fs.readFile("input.txt",function (err,data) {
        if(err)
            return console.error(err);
        console.log(data.toString());
    });
    console.log("异步读取");
    
    /*输出*/
    hello world!
    同步读取
    异步读取
    hello world!
    

    事件循环

    node使用事件驱动的模型,主循环监听事件,当检测到事件时触发回调函数

    //引入events模块
    var events = require("events");
    //创建eventEmitter对象
    var eventEmitter = new events.EventEmitter();
    
    //创建事件处理程序
    var connectHandler = function () {
        console.log("连接成功");
        //触发receive事件
        eventEmitter.emit('received');
    };
    
    //绑定connection事件处理程序
    eventEmitter.on("connection",connectHandler);
    
    //用匿名函数创建事件
    eventEmitter.on("received",function () {
        console.log("数据接收成功");
    });
    
    // 触发 connection 事件
    eventEmitter.emit('connection');
    console.log("程序执行完毕");
    
    /*输出*/
    连接成功
    数据接收成功
    程序执行完毕
    

    EventEmitter

    Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。所有这些产生事件的对象都是 events.EventEmitter的实例

    //引入events模块
    var events = require("events");
    //创建eventEmitter对象
    var eventEmitter = new events.EventEmitter();
    
    eventEmitter.on('event',function () {
        console.log('listener1 触发');
    });
    
    // 同一个事件可以绑定多个函数
    eventEmitter.on('event',function () {
        console.log('listener2 触发');
    });
    
    var listener3 = function () {
        console.log("listener3 触发");
    };
    // 也可以手动添加
    eventEmitter.addListener('event',listener3);
    
    setTimeout(function () {
        eventEmitter.emit('event');
    },1000);
    
  • 相关阅读:
    Java学习二十九天
    Java学习二十八天
    47. Permutations II 全排列可重复版本
    46. Permutations 全排列,无重复
    subset ii 子集 有重复元素
    339. Nested List Weight Sum 339.嵌套列表权重总和
    251. Flatten 2D Vector 平铺二维矩阵
    217. Contains Duplicate数组重复元素
    209. Minimum Size Subarray Sum 结果大于等于目标的最小长度数组
    438. Find All Anagrams in a String 查找字符串中的所有Anagrams
  • 原文地址:https://www.cnblogs.com/fanghao/p/7812777.html
Copyright © 2011-2022 走看看