[web]:node/js自带的异步写法callback/EventEmitter以及Generator

一、callback函数

  回调就是一个函数的调用过程。那么就从理解这个调用过程开始吧。函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b,那么这个过程就叫回调。
直接上代码:

/** 
 * node自带的异步写法:::
 * callback函数 */
function timer(time, callback) {
  console.log('this is parent function---1')
  setTimeout(() => {
    console.log('go to asynchronous function')
    callback()
    console.log('after the callback')
  }, time)
}

timer(3000, () => {
  console.log('this is callback function')
})

运行结果:

this is parent function---1
go to asynchronous function
this is callback function
after the callback

二、EventEmitter(发布订阅模式)

EventEmitter 类由 events 模块定义:

const EventEmitter = require(‘events’);

  events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
直接上代码:

/** 
 * node自带的异步写法:::
 * EventEmitter的 on 和 emit (发布订阅模式) */
const EventEmitter = require('events')
const observer = new EventEmitter()

//on:::可以触发多次,允许同一个事件(topic)最多指定10个回调函数,超过10个会发出警告,可以通过   observer.setMaxListeners(20)改为20个
observer.on('topic', (x) => {
  console.log(x, '我订阅了topic,你呢?')
})
observer.on('topic', (y) => {
  console.log(y, '我也订阅了topic,还有谁呢?')
})
//once:::回调函数只被触发一次
observer.once('topic', (x) => {
  console.log('我是once的订阅者,只被触发一次哟')
})


function main() {
  console.log('start')
  //第一个参数表示事件名称与 on 注册的事件名一致,后面参数出入为 on 中绑定的回调函数的参数
  observer.emit('topic', 8)
  observer.emit('topic', 2)
  console.log('我已经发送了2个订阅')
  console.log('end')
}

main()

运行结果:

start
8 '我订阅了topic,你呢?'
8 '我也订阅了topic,还有谁呢?'
我是once的订阅者,只被触发一次哟
2 '我订阅了topic,你呢?'
2 '我也订阅了topic,还有谁呢?'
我已经发送了2个订阅
end

三、Generator生成器函数

  generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次。generator可以让某一个函数执行某个动作之后暂时停止,之后 再次触发,再次执行。其中,多次返回的界限以 yeild 区分。
直接上代码:

/** Generator生成器函数 ‘*’语法上比普通函数多了一个星号,
 * 函数体内部可以使用yield和yield*关键字 */
function* doSomething() {
  console.log('0')
  console.log('1')
  yield               //Line(a)
  console.log('2')
  console.log('3')
}

//实例化生成器函数
var gen1 = doSomething()
//打印出‘1’,然后悬停在 Line(a) 处
gen1.next()
//恢复Line(a)点的执行,然后打印出‘2’
gen1.next()

运行结果:

0
1
2
3

四、小结

  该篇博客没有运用上的深入的讲解,可以看做是知识点的笔记,对于callback、EventEmitter和Generator的语法的讲解,具体运用场景没有说明。

欢迎大家关注本人的微信公众号,微信公众号将不定期发送相应学习文章和教程

微信号:chiyizao

或者微信公众号搜索:
迟亦早
发布了33 篇原创文章 · 获赞 43 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_31967985/article/details/102627257