码迷,mamicode.com
首页 > 其他好文 > 详细

2019年底

时间:2019-12-23 20:58:14      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:mis   prot   ext   div   rip   length   type   argument   als   

// 简易版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);
}

  

2019年底

标签:mis   prot   ext   div   rip   length   type   argument   als   

原文地址:https://www.cnblogs.com/paxster/p/12088040.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!