前端面试题 - 47. 实现compose函数, 类似于koa的中间件洋葱模型

438 阅读1分钟

递归写法

异步

app.compose = function() {
    function dispatch(index){
        const middleware = app.middlewares[index];
        
        if(!middleware) return Promise.resove();
        
        try {
            return Promise.resove(middleware(d => dispatch(index + 1)))
        } catch(err => {
            return Promise.reject(err);
        })
        
    }
    
    dispatch(0);
}

reduce写法

app.compose = function() {
   return app.middlewares.reduceRight(
       (a, b) => Promise.resove(b(a)), 
       () => Promise.resove()
   ) 
}