inflight 源码解析
inflight 源码解析
文章目录
- inflight 源码解析
- 正文
- 0. 基本信息
- 1. 源码解析
- 1.0 源码结构
- 1.1 主入口 inflight
- 1.2 启动函数创建着 makeres
- 其他资源
- 参考连接
- 阅读笔记参考
正文
0. 基本信息
- version:
v1.0.6
- 功能:收集多个回调函数并返回只执行一次的启动函数,启动时一次调用多个回调
这个与 Promise 的想法有所不同,Promise 的概念是第一次调用就会尽可能的往后执行知道挂起,这个库实现的范式则是返回一个延迟启动的函数,有点像是 Rust 中的 Future 懒执行,只有执行 .await
才会开始动作一样
这种范式对于函数执行时机的把控是更好的
1. 源码解析
1.0 源码结构
inflight.js
(阅读笔记:/inflight.js/0_structure.js
)
var wrappy = require('wrappy');
var reqs = Object.create(null);
var once = require('once');module.exports = wrappy(inflight);function inflight(key, cb) {}function makeres(key) {}function slice(args) {}
项目的主入口是使用 wrappy
包装的 inflight
函数
1.1 主入口 inflight
inflight.js
(阅读笔记:/inflight.js/1_inflight.js
)
/* 加入队列 */
// if reqs[key] => 简单加入队列
// else => 创建队列 & 返回启动函数
function inflight(key, cb) {if (reqs[key]) {reqs[key].push(cb);return null;} else {reqs[key] = [cb];return makeres(key);}
}
主入口是一个收集回调函数的方法,按 README 里面的演示,可以多次反复调用 inflight
,但是只有第一次返回启动函数
1.2 启动函数创建着 makeres
inflight.js
(阅读笔记:/inflight.js/1_inflight.js
)
/* 创建启动函数 */
function makeres(key) {// 只执行一次return once(function RES() {// 记录回调队列var cbs = reqs[key];var len = cbs.length;var args = slice(arguments);// XXX It's somewhat ambiguous whether a new callback added in this// pass should be queued for later execution if something in the// list of callbacks throws, or if it should just be discarded.// However, it's such an edge case that it hardly matters, and either// choice is likely as surprising as the other.// As it happens, we do go ahead and schedule it for later execution.try {// 执行回调for (var i = 0; i < len; i++) {cbs[i].apply(null, args);}} finally {if (cbs.length > len) {// 避免奇怪的人在执行回调的过程中加入新的函数// added more in the interim.// de-zalgo, just in case, but don't call again.cbs.splice(0, len);// 下个 tick 再执行剩余回调process.nextTick(function () {RES.apply(null, args);});} else {// 清理资源delete reqs[key];}}});
}
makeres
返回一个懒执行的启动函数 RES
,启动函数里面就是调用所有回调,然后进行资源清理
其他资源
参考连接
Title | Link |
---|---|
inflight - npm | https://www.npmjs.com/package/inflight |
npm/inflight - Github | https://github.com/npm/inflight |
阅读笔记参考
https://github.com/superfreeeee/Blog-code/tree/main/source_code_research/inflight-1.0.6
inflight 源码解析相关推荐
- 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想
OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...
- Android开发神器:OkHttp框架源码解析
前言 HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API ...
- [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush
[源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush 文章目录 [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush 0 ...
- Android八门神器(一):OkHttp框架源码解析
HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API的调用 ...
- Android八门神器(一): OkHttp框架源码解析
HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API的调用 ...
- Android八门神器(一):OkHttp框架源码解析 1
HTTP是我们交换数据和媒体流的现代应用网络,有效利用HTTP可以使我们节省带宽和更快地加载数据,Square公司开源的OkHttp网络请求是有效率的HTTP客户端.之前的知识面仅限于框架API的调用 ...
- kcp 介绍与源代码分析_KCP-GO源码解析
原标题:KCP-GO源码解析 原文作者:张伯雨 golang技术社区 概念 ARQ:自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层的错误纠正协议之一. ...
- OkHttp源码解析(上)
导语 学过Android开发的同学都知道,我们使用网络请求获取服务器的数据时,通常使用的是封装好的Retrofit框架,这个框架很好的帮助我们对网络的发起,以及返回的数据进行操作,我们使用起来十分方便 ...
- OkHttp源码解析(很细 很长)
前言 本文是对OkHttp开源库的一个详细解析,如果你觉得自己不够了解OkHttp,想进一步学习一下,相信本文对你会有所帮助. 本文包含了详细的请求流程分析.各大拦截器解读以及自己的一点反思总结,文章 ...
最新文章
- 电机驱动板测试:是否可以输出150kHz高频信号?
- 单片机c语言编程教学大纲,《单片机C语言编程》教学大纲
- CTFshow php特性 web115
- linux进入命令是什么,linux进入目录的命令是什么
- pjsua帮助手册(中文)
- mvc一对多模型表单的快速构建
- HDOJ 5071 Chat 模拟
- 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(3)--(P3P的迭代解)
- [转]阿里云配置mysql远程连接
- oracle adg维护,Oracle11gR2 Aactive DataGuard(手动)装配部署及维护文档(三)之升级及rman...
- Sql Server 内存相关计数器以及内存压力诊断
- think-cell 加载项在 Office 出现故障后消失,怎么解决?
- 卡尔曼滤波原理详解及系统模型建立(simulink)
- Electron 打包时下载 xxx-electron-v1.6.8-arch-x64.zip 文件出错
- Promise初步详解(resolve,reject,catch)
- 关于计算机的CPU的发展历史,计算机CPU的全部发展历史
- python bi_这5款BI工具,Python工程师最爱用
- 骑士数字外汇即将开启公测版,以科技领导数字金融发展!
- 《Learning to Reconstruct Botanical Trees from Single Images》学习从单幅图像重建植物树
- 大数据优化服务 黑科技创造价值 智慧旅游来势猛