美文网首页
js异步编程的四种方式

js异步编程的四种方式

作者: 天字一等 | 来源:发表于2018-09-17 18:19 被阅读8次
    1、回调函数
          function f1(calback){
            console.log(1)
            setTimeout(function () {
                calback();
            },0)
        }
        function f2() {
            console.log(2)
        }
        f1(f2);
    2、事件监听:
    3、订阅/发布模式: 存在一个信号中心,某个任务完成时,向信号中心发出一个信号,其它任务可以向信号中心“订阅”这个信号,从而知道什么时候开始执行
    > 存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中心"订阅"(subscribe)这个信号,从而知道什么时候自己可以开始执行。这就叫做["发布/订阅模式"](http://en.wikipedia.org/wiki/Publish-subscribe_pattern)(publish-subscribe pattern),又称["观察者模式"](http://en.wikipedia.org/wiki/Observer_pattern)(observer pattern)。
    
      class EventCenter {
            // 定义事件中心
            constructor() {
                this.events = {}
            }
    
            // 发布器
            on(evt, handler) {
                // 检测事件信号是否存在,当存在时不做操作,不存在时创建给予这个信号的方法存储器(数组)
                this.events[evt] = this.events[evt] || []
                console.log(this.events[evt])
                // 将传入的方法放入数组中
                this.events[evt].push({
                    handler: handler
                })
            }
    
            // 订阅器
            fire(evt, params) {
                console.log(1)
                // 检测当前被订阅的信号是否存在,存在则执行其内的所有方法
                if (!this.events[evt]) {
                    return
                }
                for (let i = 0; i < this.events[evt].length; i++) {
                    this.events[evt][i].handler(params)
                }
            }
        }
    
        let center = new EventCenter();
    
        center.on('event', function(data) {
            console.log('event执行了第一个任务')
        });
    
        center.on('event', function(data) {
            console.log('event执行了第二个任务')
        });
        console.log(6)
        center.fire('event')
    
        //最终结果  6  1  event执行了第一个任务  event执行了第二个任务
    
    

    相关文章

      网友评论

          本文标题:js异步编程的四种方式

          本文链接:https://www.haomeiwen.com/subject/qfqggftx.html