首页 > 编程语言 >koa-compose 源码解析

koa-compose 源码解析

时间:2023-04-30 13:34:42浏览次数:36  
标签:function compose return koa middleware 源码 解析

Koa-Compose 函数解析

 1 'use strict'
 2 
 3 /**
 4  * Expose compositor.
 5  */
 6 
 7 module.exports = compose
 8 
 9 /**
10  * Compose `middleware` returning
11  * a fully valid middleware comprised
12  * of all those which are passed.
13  *
14  * @param {Array} middleware
15  * @return {Function}
16  * @api public
17  */
18 
19 function compose (middleware) {
20   if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!')
21   for (const fn of middleware) {
22     if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!')
23   }
24 
25   /**
26    * @param {Object} context
27    * @return {Promise}
28    * @api public
29    */
30 
31   return function (context, next) {
32     // last called middleware #
33     let index = -1
34     return dispatch(0)
35     function dispatch (i) {
36       if (i <= index) return Promise.reject(new Error('next() called multiple times'))
37       index = i
38       let fn = middleware[i]
39       if (i === middleware.length) fn = next
40       if (!fn) return Promise.resolve()
41       try {
42         return Promise.resolve(fn(context, dispatch.bind(null, i + 1)))
43       } catch (err) {
44         return Promise.reject(err)
45       }
46     }
47   }
48 }

 

标签:function,compose,return,koa,middleware,源码,解析
From: https://www.cnblogs.com/taue997/p/17365174.html

相关文章

  • koa-cors 源码及基本原理解析
    cors: 跨域资源共享(Cross-OriginResourceSharing)是一种机制,用来允许不同源服务器上的指定资源可以被特定的Web应用访问。在koa项目中使用cors中间件:eg:1varkoa=require('koa');2varroute=require('koa-route');3varcors=require('koa-cors');4varapp......
  • 从源码编译并安装LXQT
    平台:ubuntu-22.04-server-amd64.对象:LXQT.文件:lxqt.LXQt是由LXDE-Qt和RazorQt合并的项目,它的目标是创建一个轻量级、模块化、运行快并且简单易用的桌面环境。本例中会介绍多种发行版下的编译方法,本例中使用Ubuntu22.04,你也可以使用其它发行版。1.安装编译环境CMake版本≥3.......
  • Django的message组件(源码分析)
    Django的Message组件(源码分析)1.配置#MESSAGE_STORAGE='django.contrib.messages.storage.fallback.FallbackStorage'#MESSAGE_STORAGE='django.contrib.messages.storage.cookie.CookieStorage'MESSAGE_STORAGE='django.contrib.messages.stor......
  • SpringBoot读取.yml配置文件最常见的两种方式-源码及其在nacos的应用
    三、第二种方式(推荐)这种方式是小编比较推荐的,虽然看似比​​@Value​​麻烦不少,但是更加的规范,在配合nacos的时候也可以动态的修改,会立即生效,一会小编带大家试一下哈!!为什么推荐这种方式呢,是因为spring他们都是使用这种方式进行配置的,所以跟着官方走不会有错的!!1.修改yml文件我们......
  • vue3源码-一、响应式原理reactive的实现
    reactive的实现使用:使用reactive()函数创建一个响应式对象。import{reactive}from'vue'exportdefault{//`setup`是一个专门用于组合式API的特殊钩子函数setup(){conststate=reactive({count:0})//暴露state到模板return{......
  • 第四篇:白话tornado源码之褪去模板外衣的前戏
    原笔记博客链接:https://www.cnblogs.com/wupeiqi/p/4592637.html 执行字符串表示的函数,并为该函数提供全局变量本篇的内容从题目中就可以看出来,就是为之后剖析tornado模板做准备,也是由于该知识点使用的巧妙,所有就单独用一篇来介绍了。废话不多说,直接上代码:#!u......
  • Docker CLI docker compose pause和unpause常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • vue2源码-十七、Vue组件间传值的方式及之间区别
    Vue组件间传值的方式及之间区别通过props传递:父组件传递数据给子组件使用//chilid,vueprops:{//字符串形式name:String//接收的类型参数//对象形式age:{type:Number,//接收的类型为数值defaule:18,//默认值为18r......
  • 深入探讨源码--ArrayList
    持续推送技术干货目录深入探讨源码之ArrayListArrayList类图ArrayList的数据结构ArrayList的关键属性ArrayList构造方法ArrayList常用方法add方法ArrayList中的fast-fail机制add(i,o)方法set(i,o)方法get(i)方法remove(index)方法remove(Object)方法clear方法indexOf(o)方法深......
  • Java重写源码中的方法
    重写步骤:1.找到你所要重写的方法的所在类,查看其中的路径;2.在我们的src目录下新建一个同包名同类名的类;3.将jar包中的重写方法所在类的所有代码复制到我们新建的同包名同类名的类中;4.在我们新建的同包名同类名的类中修改对应的方法中的代码,注意要保持方法中的参数不要发生改变,也......