搜索
您的当前位置:首页正文

js异步编程的四种方式

来源:二三娱乐
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执行了第二个任务

Top