模拟koa洋葱模型实现
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);
};
![](http://muchstudy.com/2020/04/04/%E8%81%8A%E8%81%8A%E4%B8%80%E7%BA%BF%E5%BC%80%E5%8F%91%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%B4%A0%E5%85%BB/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BA%8C%E7%BB%B4%E7%A0%81.gif)
模拟koa洋葱模型实现相关推荐
- 学习 koa 源码的整体架构,浅析koa洋葱模型原理和co原理
前言 这是学习源码整体架构系列第七篇.整体架构这词语好像有点大,姑且就算是源码整体结构吧,主要就是学习是代码整体结构,不深究其他不是主线的具体函数的实现.本篇文章学习的是实际仓库的代码. 学习源码整体 ...
- 50行代码串行Promise,koa洋葱模型原来这么有趣?
1. 前言 大家好,我是若川,最近组织了源码共读活动<1个月,200+人,一起读了4周源码>,感兴趣的可以加我微信 ruochuan12 参与,长期交流学习. 之前写的<学习源码整体 ...
- 【koa系列】koa洋葱模型及其compose原理解析
什么是洋葱模型 先来看一个 demo const Koa = require('koa'); const app = new Koa();// 中间件1 app.use((ctx, next) =&g ...
- 洋葱模型php,理解Koa洋葱模型
中间件特性 | | | middleware 1 | | | | +-----------------------------------------------------------+ | | | ...
- 你需要掌握的 Koa 洋葱模型和中间件
大家好,我是前端西瓜哥. Koa 是一个 nodejs 框架,经常用于写 web 后端服务.它是 Express 框架的原班人马开发的新一代 web 框架,使用了 async / await 来优雅处 ...
- koa - 洋葱模型浅析
1.什么是koa? Koa是一个精简的node框架,被认为是第二代Node框架,其最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型,它的核心工作包括下面两个方面: 将node原生的req和re ...
- 什么是koa洋葱模型?
什么是koa? Koa是一个精简的node框架,被认为是第二代Node框架,其最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型,它的核心工作包括下面两个方面: 将node原生的req和res封 ...
- 洋葱模型php,koa 洋葱模型
分析 1.首先这是koa2最简单的入门例子,我将通过这个入门例子来演示koa2的洋葱模型 const Koa = require('koa'); const app = new Koa(); app. ...
- koa 洋葱模型的简单实现
需求: 让一个函数, 执行到一半的时候, 去执行其他函数,大致如下 输出顺序依次为: 1 > 3 > 5 > 6 > 4 > 2 上面 koa 的执行,有点类似如下效果: ...
最新文章
- 蘑菇模拟器TV版 for Android,安卓NES模拟器TV版下载
- AndroidApplication优化解耦
- a开头的计算机语言,我们刚开始接触计算机语言大多从Hello world 开始
- 使用__slots__限定实例的成员列表
- 在下列集成电路说法中不正确_教孩子正确认识性别,保护个人隐私,对成长中的尴尬行为说不...
- python中scipy库的导入与函数调用方法_python的scipy库安装成功,导入scipy或其函数时却报错的问题...
- java正则表达式版本_java 正则表达式 版本号_java正则表达式?=.*_密码的正则表达式java...
- 《大秦帝国》:中国文明正源的强势生存
- 各有利弊,开源和商业软件应该怎么选?
- 利用python进行微信好友数据分析
- “数据源“SqlServer ”包含无法用于处理操作的 ImpersonationMode。不能与名称为“SqlServer ”的数据源进行连接。”
- TI RTOS BLE NVS FLASH 驱动
- 智能手表产业迎来潜在的市场空间
- CFile记录日志——写各种数据类型的日志(CFile读写包括编码UTF-8)
- 长期提供orkut / gmail 邀请
- 《安全屋》第一季华丽登场,一桩划算的数据“买卖”
- d3.js读书笔记-2
- Linux下的top命令PR,NI,VIRT,RES,SHR,S的解释
- 光纤接入设备及使用图解
- mysql定时备份数据库
热门文章
- 新手如何做游戏代理赚钱?
- 用matlab进行批量优化,多目标优化实例和matlab程序
- java 自动生成条形码_JAVA生成商品条形码
- 企业邮箱Foxmail提示错误421 too many connections
- 数据保护与隐私无从下手?IBM Guardium在全面可靠上拔头筹!
- 数据安全审计_使用数据级安全性对InfoSphere Guardium中的审计结果进行细粒度访问控制
- nyoj82 迷宫寻宝(一) (bfs)
- 鼠绘-汽车侧面绘制过程
- 阅读《基于知识图谱技术的数据资产管理设计与应用验证研究》笔记
- 【WB32库开发】第12章(上)TIM1高级定时器——PWM输入捕获