nodeJS-作用域事件异步-DAY2

01-控制台输出

//打印输出
console.log('这是输出内容!');
//打印错误
console.error('这是错误信息');

//打印时间戳
console.time('时间');
console.log('console.time');
for(var i=0; i<10; i++){
    console.log(i);
}
console.error('console.timeEnd');
console.timeEnd('时间');
2018-09-20_121542.png

02-nodeJs作用域

// 定义模块 show.js

// 把变量挂在全局 都可以使用
global.username = '李寻欢'

function show (username) {
    console.log(`${username}很秀!!!`)
}

console.log(arguments.callee.toString())

// 暴露出去
module.exports = show;

// 引入模块 main.js
var show = require('./show');

console.log(show);

show(username);

a.)函数声明和函数表达式

    <script >
    // sayHi();
    // sayHello();

    console.log(sayHi, sayHello)
    
    // 函数声明
    function sayHi () {
        console.log('Hi !!!')
    }    

    // 函数表达式 (变量会提升 但是赋值 保留在原位)
    var sayHello  = function () {
        console.log('Hello !!!')
    }
    sayHello();

</script>

03-回调函数

01.)-callBack定时器.js

// 定时器
function cb () {
    console.log('哈哈')
}
setTimeout(cb, 1000)

setTimeout(function () {
    console.log('呵呵')
}, 1000)

02.)-callBack事件.html

<button id="btn">按钮</button>

<script>

    // 绑定事件回调函数
    $('#btn').on('click', function () {
        alert('嘿嘿')
    })

</script>

04-Events事件模块

01-ES5事件模块入门.js

// 引入事件 events 模块
var EventEmitter = require("events").EventEmitter;

// 根据这个 EventEmitter 创建实例 (这个实例可以用来 监听事件 触发事件)
var myEvent = new EventEmitter();

// 监听事件
myEvent.on('myevent', function (name) {
    console.log(name + ':我被触发了!好开心!')
})

// 触发事件
myEvent.emit('myevent', '李寻欢');

/*
    小结:
        1) 通过on监听的事件,可以通过emit触发
        2) 监听的事件类型 可以自定义, 触发的时候保持一致即可.
*/ 

02-ES6事件模块入门.js

// 移入events模块
const Events = require('events');

// 写一个子类 继承父类
class MyEmitter extends Events {}

// 根据子类 创建实例 (这个实例可以用来监听事件 触发事件)
const myEvent = new MyEmitter();

// 监听事件
myEvent.on('myevent', (name) => {
    console.log(`我被${name}触发了`);
})


// 触发事件
myEvent.emit('myevent', '李寻欢');

03-ES6事件模块其他API.js

// 1) 引入events模块
const Events = require('events');

// 2) 写一个子类 继承父类
class MyEmitter extends Events {};

// 3) 根据子类 创建实例 (这个实例可以用来监听事件 触发事件)
const myEvent = new MyEmitter();


// 监听器(回调函数)
var cb = (name) => {
    console.log(`我被${name}触发了`)
}

// var cb1 = (name) => {
//     console.log(`我被${name}触发了`)
// }


// 设置最大监听数量
myEvent.setMaxListeners(5);

// 监听事件
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
myEvent.on('myevent', cb);
// myEvent.on('myevent1', cb1)

// 只触发一次
// myEvent.once('myevent', (name) => {
//     console.log(`我被${name}触发了`)
// })

// 监听事件 和 on一样
// myEvent.addListener('myevent1', (name) => {
//     console.log(`我被${name}触发了`)
// })

// 移除指定的监听器
// myEvent.removeListener('myevent', cb);

// 移除所有监听器
// myEvent.removeAllListeners();




// 触发事件
myEvent.emit('myevent', '李寻欢');

// myEvent.emit('myevent1', '小李飞刀');

05-同步和异步

同步:  阻塞  (后面的代码 必须要等待前面的代码执行完毕 安装从上到下的顺序执行)
异步:  不阻塞 ( 不阻塞代码  同时执行 )

同步:总是等待上一个任务完成后,才开始下一个任务的执行
异步:开始一个(异步)任务,任务去执行,但是不会让后面的任务等待(阻塞),后面的任务继续执行

01-同步和异步的认识

nodejs常见异步编程方式:

  1. 回调函数(定时器)
  2. 事件绑定(基于回调)
  3. Promise
1) 回调函数(定时器)
<script>
    // 同步代码
    // console.log('1');

    // alert('2');
    // console.log('2')

    // console.log('3')

    // 异步代码
    console.log('1');

    // 定时器 (异步)
    setTimeout(() => {
        console.log('2')
    }, 1000)
    // 定时器 (异步)
    setTimeout(() => {
        console.log('3')
    }, 2000)

    console.log('4')

    for (var i = 0; i < 1000000000; i++) {}

    console.log('5')

    //打印结果为:1 4 5 2 3
</script>

02-文件异步读取

2) 事件绑定(基于回调)
//fs:文件系统模块,提供对文件的操作
var fs = require("fs");

//创建输出流,读取文件
var stream = fs.createReadStream("./readme.txt");

//读取数据事件,每次读取都会触发。
stream.on("data",function(data){
    console.log(data.toString());
});

//读取数据完毕
stream.on("end",function(){
    console.log("文件读取完毕");
});

console.log('代码执行到了');

3) Promise

Promise(承诺) 就是一个对象,用来传递异步操作的消息。它代表了某个未来才会知道结果的事件(通常是一个异步操作),并且这个事件提供统一的 API,可供进一步处理。

7. Promise是ES6的一个对象(要用的时候要new出来哦!)
1) Promise有三种状态:
    进行中 pending
    已成功 resolved
    已失败 rejected

2) 状态的改变 有两种
    进行中 pending  => 已成功 resolved
    进行中 pending  => 已失败 rejected

3) 基本使用伪代码
    var promise = new Promise((resolve, reject) => {
        // 这里会有很多的逻辑代码
        if (成功) {
            resolve(data)   // 如果成功 用resolve处理
        } else { 
            reject(error)   // 如果失败 用reject处理
        }
    })
        .then((data) => {
            // 接收成功的数据
        }, (err) => {
            // 打印失败的提示
        })
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容