koa洋葱模型即是注册的中间件采取先进后出的运行策略。

问题

app.use(async next => {console.log(1);await next();console.log(2);
});
app.use(async next => {console.log(3);await next();console.log(4);
});// 异步函数
function fn() {return new Promise((resolve, reject) => {setTimeout(() => {resolve("hello");}, 3000);});
}
app.use(async next => {console.log(5);let res = await fn(); // 调用异步函数console.log(res)await next();console.log(6);
});app.compose();

实现use与compose方法,预期输出如下结果

1
3
5
hello
6
4
2

方法实现

var app = {middlewares: []
};// 创建 use 方法
app.use = function(fn) {app.middlewares.push(fn);
};app.compose = function() {// 递归函数function dispatch(index) {// 如果所有中间件都执行完跳出if (index === app.middlewares.length) return Promise.resolve();// 取出第 index 个中间件并执行const middleware = app.middlewares[index];// 核心在这一行return Promise.resolve(middleware(() => dispatch(index + 1)));}// 取出第一个中间件函数执行dispatch(0);
};

模拟koa洋葱模型实现相关推荐

  1. 学习 koa 源码的整体架构,浅析koa洋葱模型原理和co原理

    前言 这是学习源码整体架构系列第七篇.整体架构这词语好像有点大,姑且就算是源码整体结构吧,主要就是学习是代码整体结构,不深究其他不是主线的具体函数的实现.本篇文章学习的是实际仓库的代码. 学习源码整体 ...

  2. 50行代码串行Promise,koa洋葱模型原来这么有趣?

    1. 前言 大家好,我是若川,最近组织了源码共读活动<1个月,200+人,一起读了4周源码>,感兴趣的可以加我微信 ruochuan12 参与,长期交流学习. 之前写的<学习源码整体 ...

  3. 【koa系列】koa洋葱模型及其compose原理解析

    什么是洋葱模型 先来看一个 demo const Koa = require('koa'); const app = new Koa();// 中间件1 app.use((ctx, next) =&g ...

  4. 洋葱模型php,理解Koa洋葱模型

    中间件特性 | | | middleware 1 | | | | +-----------------------------------------------------------+ | | | ...

  5. 你需要掌握的 Koa 洋葱模型和中间件

    大家好,我是前端西瓜哥. Koa 是一个 nodejs 框架,经常用于写 web 后端服务.它是 Express 框架的原班人马开发的新一代 web 框架,使用了 async / await 来优雅处 ...

  6. koa - 洋葱模型浅析

    1.什么是koa? Koa是一个精简的node框架,被认为是第二代Node框架,其最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型,它的核心工作包括下面两个方面: 将node原生的req和re ...

  7. 什么是koa洋葱模型?

    什么是koa? Koa是一个精简的node框架,被认为是第二代Node框架,其最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型,它的核心工作包括下面两个方面: 将node原生的req和res封 ...

  8. 洋葱模型php,koa 洋葱模型

    分析 1.首先这是koa2最简单的入门例子,我将通过这个入门例子来演示koa2的洋葱模型 const Koa = require('koa'); const app = new Koa(); app. ...

  9. koa 洋葱模型的简单实现

    需求: 让一个函数, 执行到一半的时候, 去执行其他函数,大致如下 输出顺序依次为: 1 > 3 > 5 > 6 > 4 > 2 上面 koa 的执行,有点类似如下效果: ...

最新文章

  1. 蘑菇模拟器TV版 for Android,安卓NES模拟器TV版下载
  2. AndroidApplication优化解耦
  3. a开头的计算机语言,我们刚开始接触计算机语言大多从Hello world 开始
  4. 使用__slots__限定实例的成员列表
  5. 在下列集成电路说法中不正确_教孩子正确认识性别,保护个人隐私,对成长中的尴尬行为说不...
  6. python中scipy库的导入与函数调用方法_python的scipy库安装成功,导入scipy或其函数时却报错的问题...
  7. java正则表达式版本_java 正则表达式 版本号_java正则表达式?=.*_密码的正则表达式java...
  8. 《大秦帝国》:中国文明正源的强势生存
  9. 各有利弊,开源和商业软件应该怎么选?
  10. 利用python进行微信好友数据分析
  11. “数据源“SqlServer ”包含无法用于处理操作的 ImpersonationMode。不能与名称为“SqlServer ”的数据源进行连接。”
  12. TI RTOS BLE NVS FLASH 驱动
  13. 智能手表产业迎来潜在的市场空间
  14. CFile记录日志——写各种数据类型的日志(CFile读写包括编码UTF-8)
  15. 长期提供orkut / gmail 邀请
  16. 《安全屋》第一季华丽登场,一桩划算的数据“买卖”
  17. d3.js读书笔记-2
  18. Linux下的top命令PR,NI,VIRT,RES,SHR,S的解释
  19. 光纤接入设备及使用图解
  20. mysql定时备份数据库

热门文章

  1. 新手如何做游戏代理赚钱?
  2. 用matlab进行批量优化,多目标优化实例和matlab程序
  3. java 自动生成条形码_JAVA生成商品条形码
  4. 企业邮箱Foxmail提示错误421 too many connections
  5. 数据保护与隐私无从下手?IBM Guardium在全面可靠上拔头筹!
  6. 数据安全审计_使用数据级安全性对InfoSphere Guardium中的审计结果进行细粒度访问控制
  7. nyoj82 迷宫寻宝(一) (bfs)
  8. 鼠绘-汽车侧面绘制过程
  9. 阅读《基于知识图谱技术的数据资产管理设计与应用验证研究》笔记
  10. 【WB32库开发】第12章(上)TIM1高级定时器——PWM输入捕获