zoukankan      html  css  js  c++  java
  • 2019年底

    // 简易版emit/on
    function Pubsub(){
         //存放事件和对应的处理方法
        this.handles = {};
     }
     Pubsub.prototype={
         //传入事件类型type和事件处理handle
         on: function (type, handle) {
             if(!this.handles[type]){
                 this.handles[type] = [];
             }
             this.handles[type].push(handle);
         },
         emit: function () {
             //通过传入参数获取事件类型
            var type = Array.prototype.shift.call(arguments);
            console.log(type, 'type');
             if(!this.handles[type]){
                 return false;
             }
     for (var i = 0; i < this.handles[type].length; i++) {
                 var handle = this.handles[type][i];
                 //执行事件
                console.log(handle, 'handle', arguments);
                handle.apply(this, arguments);
             }
         },
         off: function (type, handle) {
             handles = this.handles[type];
             if(handles){
                 if(!handle){
                     handles.length = 0;//清空数组
                }else{
     for (var i = 0; i < handles.length; i++) {
                         var _handle = handles[i];
                         if(_handle === handle){
                             handles.splice(i,1);
                         }
                     }
                 }
             }
         }
     }
    
     var p1 = new Pubsub();
     p1.on('mm', function (name) {
         console.log('mm: '+ name);
     });
     p1.emit('mm','哈哈哈哈');
    
    
    // 洋葱圈模型
    // 实现方式一
    function compose (middleware) {
       return async function () {
          let args = arguments
          await dispatch(0)
          function async dispatch (i) {
             const fn = middleware[i]
             if (!fn) return null
             await fn(function next () {
                dispatch(i + 1)
             }, ...args)
          }
       }
    }
    // 实现方式二
    function compose(middlewares=[fn1,fn2,fn3])
    {
        function dispatch(i)
        {
            let fn=middlewares[i]
            if(!fn){
                return Promise.resolve()
            }
            else
            {
                return new Promise((resolve)=>{
                    resolve(fn(function next () {
                        return dispatch(i + 1)
                    }));
                });
            }
        }
        return dispatch(0);
    }
    

      

  • 相关阅读:
    上机练习
    myeclipse 快捷键
    关于java classpath问题
    windows installer 出错问题解决
    hibernate 问题
    axis2 部署webservice
    webservice开发
    关于web前端开发
    软件工程工具
    计网笔记
  • 原文地址:https://www.cnblogs.com/paxster/p/12088040.html
Copyright © 2011-2022 走看看