十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Bluebird Promise 库版本演进全解析:从 0.3.0 到 3.7.2 的完整变更日志深度解读

Bluebird Promise 库版本演进全解析:从 0.3.0 到 3.7.2 的完整变更日志深度解读 后端【免费下载链接】bluebird:bird: :zap: Bluebird is a full featured promise library with unmatched performance.项目地址https://gitcode.com/gh_mirrors/bl/bluebird点击查看免费下载本篇技术指南以仓库 docs/docs/changelog.md 为唯一主线系统梳理 Bluebird 自 2013 年 0.3.0 至 2019 年 3.7.2 的全部版本记录涵盖功能特性、Bug 修复、破坏性变更与维护节奏。读完本文你将理解 Bluebird 六大核心能力集合方法、协程、promisify、取消、超时、未处理拒绝监控是如何在六年迭代中逐步成形与完善的并能对照 src 源码定位关键实现的落点。如何阅读这份变更日志该文档采用「版本号 发布日期 分类条目」的结构每个版本按Features与Bugfixes个别版本还有Misc归类条目后附带对应的 GitHub issue 编号如[#1606](https://link.gitcode.com/i/0193daf9876d78d3ae7688a7e15936b1)。需要说明的是部分早期版本0.3.0 ~ 0.7.x 区间的条目仅为feature/bugfix占位符属于当年发布流水线的占位记录实际改动未详细列出阅读时不应据此推断具体功能3.0.0 / 3.0.1 两个版本指向 新特性说明2.0.0 则内嵌了完整的「Whats new in 2.0」清单文档中的 API 链接均指向文档站点 API 页对应本仓库 docs/docs/api 目录下的同名 Markdown 文件如.map→ map.md。一、3.x 时代2015–2019稳定期与生态整合3.x 是 Bluebird 的长期稳定主线从 2015 年 10 月 3.0.0 发布到 2019 年 11 月 3.7.2 收尾四年间共 7 个次版本节奏平缓、以修复为主。3.7.x收尾维护与 Promise.allSettled3.7.02019-10-01新增Promise.allSettled方法#1606。该方法返回一个在所有输入 promise 都已敲定settled后才敲定的 promise且始终以{value, reason, status}形式的数组完成不会因某个输入被拒绝而拒绝。其实现位于 src/settle.js#L48Promise.allSettled function (promises) { ... };3.7.12019-10-15修复#1614、#1613、#1616三个问题3.7.22019-11-28修复 Firefox 下settimeout not initialized错误#1623这是调度器在浏览器环境初始化顺序上的兼容性修补。3.6.0AsyncResource 集成与未处理拒绝清理3.6.02019-10-01是本阶段功能量最大的一次发布新增 AsyncResource 支持#1403当运行在支持async_hooks的 Node.js 环境中时Bluebird 会为 promise 创建AsyncResource上下文使基于 async 钩子的诊断工具如 Node 的性能分析、CLS 类库能够追踪 promise 的异步生命周期。实现在 src/promise.js#L34-L39var AsyncResource util.isNode util.nodeSupportsAsyncResource ? require(async_hooks).AsyncResource : null; // 构造 Promise 时async: new AsyncResource(Bluebird::Promise)环境检测在 src/util.js#L424 的nodeSupportsAsyncResource中完成并通过 try/catch 包裹require(async_hooks)在不支持的旧版本 Node 上自动降级为null不影响正常功能。未处理拒绝事件清理修复 .reduce#1501、Promise.reduce#1502、.map#1487、Promise.map#1489在特定路径下产生虚假 unhandled rejection 事件的问题取消向上传播修复 cancel 跳过向上传播的缺陷#1459PromiseRejectionEvent 规范对齐使PromiseRejectionEvent符合规范#1509栈溢出与性能修复 Promise.each 的 maximum stack exceeded#1326、loadTimes弃用警告#1505、虚假未处理拒绝#1468。3.5.xtapCatch、Symbol.toStringTag 与内存保持3.5.02017-03-03新增 .tapCatch 方法#1220——与.tap对称的仅在拒绝时旁路观察工具其实现位于 src/finally.js#L114。同一版本还修复了 streamline 基准测试#1233、yield 函数被意外调用#1314/#1315、.props 空Map输入解析为空对象#1338、直接调用Promise(...)而未用new时的误导性报错#1320并为 webpack 增加专用入口#13183.5.52019-05-24为 Promise 增加Symbol.toStringTag支持#1421修复 IE9 下错误#1591/#1592、undefined 堆栈#1537、.catch 传非函数 handler 时从立即抛错改为稍后抛错#15173.5.4 / 3.5.3分别是 VSCode 版本检测修复#1576与 acorn 依赖更新3.5.22018-09-03修复PromiseRejectionEvent缺少.reason/.promise属性#1509/#1464以及 promise 链在整条链全部敲定前一直保持内存引用的问题#1544/#15293.5.12017-10-04修复 async/await 场景下的虚假未处理拒绝#1404与非 Error 值报错的误报#990。3.4.xPromise.version 与 getNewLibraryCopy3.4.02016-05-17新增Promise.version属性#1042以字符串形式暴露库版本如3.4.0源码中定义为 src/promise.js#L826 的Promise.version __VERSION__构建期替换同时 .map/Promise.map/.filter/Promise.filter 在传入不合适的 options 参数时改为返回已拒绝的 promise#10973.4.12016-06-17新增 Promise.getNewLibraryCopy实现位于 src/promise.js#L199用于在全局被污染或需隔离配置时生成独立副本3.4.72016-12-22Promise.config返回对 Bluebird 库本身的引用、更新 Logo、修复基准测试、不再从堆栈中丢弃 SyntaxError 上下文、修复环境变量偶尔启用长堆栈的问题。3.3.x协程栈溢出、监控钩子与警告系统3.3.02016-02-12取消 Promise.delay/.delay 返回的 promise 现在会调用clearTimeout#1000新增监控与生命周期钩子Promise Monitoring以及warning钩子#980——这套钩子后来成为蓝鸟诊断能力的基础3.3.3修复 promisified 函数返回的 promise 在大型数组中提前拒绝时 Promise.mapSeries/Promise.each 的栈溢出3.3.2修复 .done() 堆栈缺少换行、并新增深层循环解析检测3.3.1修复取消 .tap() handler promise 时的崩溃#1006。3.2.x / 3.1.x调度器与构建链3.2.0 是一次损坏的构建版本文档明确标注 Broken build3.2.1 因浏览器崩溃回滚了监控特性3.2.2 让构建脚本在无 TTY 环境下可用。3.1.x 则包含node 0.12 生成器崩溃修复#978、.timeout() 取消时清理定时器#926、Promise.coroutine 保持原函数.length#927/#933、.finally() 在 domain 激活时取消不触发 handler 的修复#963以及 3.1.0 引入的可单独配置遗忘返回语句警告warning-explanations。3.0.x从 2.x 到 3.x 的跨越3.0.02015-10-27与 3.0.1 直接指向 new-in-bluebird-3 说明破坏性变更如移除 progression、deferreds 迁移等。3.0.x 系列修复包括Promise.config({longStackTraces: false})失效#897、.timeout() 未取消父 promise#891、node.js domains 崩溃#829以及3.0.3引入的环境变量约定当NODE_ENVdevelopment时可用BLUEBIRD_DEBUG0关闭调试模式。这一环境变量约定一直沿用相关说明见 environment-variables。二、2.x 时代2014–2016功能爆发期2.0.0资源管理与并发协调重塑2.0.02014-06-04是 Bluebird 历史上最大的一次功能扩张文档内嵌的 Whats new in 2.0 清单要点如下资源管理新增 using() 与 disposer()再也不泄漏资源Promisification 升级整模块一行代码 promisify.map()、.each()、.filter()、.reduce()从简单语法糖升级为并发协调工具map/filter增加concurrency选项回调在输入项一敲定即被调用同步检查移除.inspect()新增 .value() 与 .reason()见 synchronous-inspection.cancel() 支持自定义取消原因.timeout() 由拒绝改为取消.nodeify() 支持多成功结果映射Promise.promisifyAll() 增加suffix与filter选项。破坏性变更稀疏数组空洞不再被集合方法跳过而是视为undefined元素.map/.filter不再保证回调执行顺序协程默认不再支持 yield 数组可用 coroutine.addYieldHandler 恢复.any()/.some() 的拒绝原因从数组改为 AggregateError——后者实现在 src/errors.js#L28是一个继承自 Error 并聚合了数组迭代方法的特殊错误类型。2.1.x – 2.3.xpromisifier 选项、reflect 与绑定2.1.0为Promise.promisifyAll()增加promisifier自定义选项并提升 .props() 与集合方法在立即值场景的性能2.3.0.bind() 与 Promise.bind 现在会等待thisArg若是 promise/thenable解析完成2.3.1.using可混用不同 bluebird 副本创建的 disposer2.3.6实现 .reflect()2.2.0.any/.some在输入过少时统一以RangeError拒绝。2.4.x – 2.9.x性能、promisifyAll 与调度器迭代这段密集的补丁期基本奠定了 3.x 的工程基础2.6.02015-01-06宣称并行 promise 性能提升约 50%、内存占用减少约 50%文档原文 50% faster, -50% less memory并伴随大量内部重构2.8.02015-01-19长堆栈long stack traces重新设计更可读、更精简并支持 IE102.9.0新增Promise.fromNode与Promise.bind的value参数2.9.7让 promisify 保留原函数自定义属性从而可同时 promisifyrequest模块的导出函数及其方法promisifyAll方法不再依赖this2.9.15增加.asCallback作为.nodeify别名调度器scheduler长期斗争2.9.14 固定使用process.nextTick2.9.16 在有setImmediate时优先使用2.9.27 修复sinon.useFakeTimers()破坏调度器的问题#631Promise.setScheduler 自 2.0 起对外开放期间还修复了 2.9.4 中 .timeout() 未用正确句柄调用clearTimeout导致进程空等的回归全局拒绝事件2.7.0 实现 global rejection events#428/#3572.8.2 起在浏览器中同时以 DOM3 事件和 legacy 事件两种方式触发配套 API 见 promise.onunhandledrejectionhandled 与 promise.onpossiblyunhandledrejection。三、1.x 与 0.x性能与调试的奠基1.x 关键节点1.0.02014-01-12集合方法不再跳过稀疏数组空洞向后不兼容reduce的迭代函数允许返回 promise/thenable1.1.0实现 .tap() 与Promise.coroutine.addYieldHandler()弃用Promise.prototype.spawn1.2.0新增 .value()、.reason() 与Promise.onUnhandledRejectionHandled()map/filter开始尽早调用回调但保持正确顺序1.0.5promisified 函数按最优顺序检查参数数量且与原始函数.length相差 1减去回调参数。0.x 早期性能、调试与浏览器兼容0.9.x相继实现 .bind/Promise.bind0.9.0、Promise.race0.9.9、.props()0.8.3、Promise.method/.return/.throw0.10.0、Promise.resolve/reject/defer0.10.1并实现 RejectionError 包装与 .error() 方法0.9.60.10.10浏览器默认关闭长堆栈需显式调用Promise.longStackTraces()开启文档0.8.5支持通过BLUEBIRD_DEBUG环境变量开启进程级长堆栈0.8.1移除了非必要的动态求值new Function/eval改用特性检测做静态求值为 CSP 受限环境铺路0.8.3支持 AMD 命名模块0.7.10使测试通过 IE8 并创建浏览器测试体系0.8.3-2允许以require(bluebird/zalgo)方式释放 Zalgo同步回调——这是唯一为知情者提供的同步捷径0.11.6起 .filter 的 filterer 可返回 promise/thenable.error()扩展为捕获来自Promise.reject、thenable reject、promisified errback、new Promise显式 reject 与PromiseResolver.reject等多类拒绝来源。四、贯穿各版本的修复主线纵向看变更日志中的数百条修复可归纳为几条反复出现的工程主线这对理解 Bluebird 的内部架构极有帮助1. 未处理拒绝unhandled rejection体系从 1.0.x 的按 promise 而非按 error 跟踪拒绝、2.9.28 的已处理拒绝被误报、3.5.1 的 async/await 误报到 3.6.0 对 .reduce/.map/.filter 虚假拒绝事件的一揽子修复未处理拒绝的判定精度贯穿始终。相关行为在 test/mocha/unhandled_rejections.js 等测试中持续回归验证。2. 取消与超时cancellation timeout.cancel() 与 .timeout() 的交互父链传播、clearTimeout清理、与 .bind() 的配合在 2.9.20、3.0.6、3.1.2、3.3.0、3.6.0 多次迭代最终行为可参考 test/mocha/cancel.js 与 test/mocha/timers.js。3. 长堆栈long stack traces从 0.8.x 的环境变量开关、2.4.0 对 minified 文件内部帧的过滤、2.8.0 的重新设计支持 IE10、3.4.7 的环境变量误触发修复到 debuggability.js 中与asyncHooks选项的联动调试能力是 Bluebird 区别于原生 Promise 的核心卖点之一。4. 调度器scheduler演进MutationObserver → setImmediate → process.nextTick → setTimeout的探测与回退策略贯穿 0.7.x 至 2.9.x 的十余条修复Safari 6、NW、Chrome、Firefox、iOS 8.1 WebApp 各自踩过坑最终收敛为 schedule.js 中按环境自适应的实现并支持 Promise.setScheduler 自定义。5. promisify / promisifyAll 演进2.1.0 的promisifier选项、2.7.0 向自定义 promisifier 传入默认实现与passesDefaultFilter、2.9.7 的属性保留与this解耦、2.9.29 对类构造函数的识别、3.5.0 的 webpack 入口——promisify 的成熟过程体现了对真实生态mongodb、request 等模块的持续适配详见 promisify.js。6. 浏览器兼容性战场IE8/IE9/IE10、Firefox、Chrome、Safari、iOS WebApp、node-webkit、NW.js、PhantomJS、WebWorker、jsdom 等环境的专门修复在日志中反复出现这也是 Bluebird 敢于在浏览器环境宣称可靠性的底气来源相关构建与测试脚本见 tools/browser_test_runner.js 与 test/browser。五、从变更日志看 Bluebird 的设计哲学性能是硬指标从 0.7.x 起几乎每个版本都有Improve performance条目2.6.0 的并行性能跃升与 0.8.1 的动态求值移除体现了性能优先、安全兜底的取舍调试能力是一等公民长堆栈、未处理拒绝、警告系统含遗忘返回语句警告与 warning-explanations 文档构成了完整的开发者体验闭环激进演进 明确文档化2.0 与 3.0 两次大版本均伴随明确的破坏性变更清单与迁移文档new-in-bluebird-3、deferred-migration、progression-migration小版本则严格遵守语义化版本节奏生态务实主义对 Promise/A 规范的逐条对齐循环 thenable、2.3.2 adoption 顺序、自引用解析等与对第三方库sinon、request、mongodb、jsdom现实问题的快速修补并行不悖。源码索引版本元数据与库入口src/promise.jsPromise.version、Promise.getNewLibraryCopy、AsyncResource 集成集合与并发方法src/map.js、src/each.js、src/filter.js、src/reduce.js、src/settle.jsPromise.allSettled、src/some.jsAggregateError使用取消/超时/绑定src/cancel.js、src/timers.js、src/bind.jspromisify 与 node 互操作src/promisify.js、src/nodeify.js调试与调度src/debuggability.js、src/schedule.js、src/queue.js文档与测试完整 API 见 docs/docs/api-reference.md回归测试见 test/mocha 目录如 unhandled_rejections.js、cancel.js、promisify.js性能基准见 benchmark 目录与 docs/docs/benchmarks.md。赞分享后端【免费下载链接】bluebird:bird: :zap: Bluebird is a full featured promise library with unmatched performance.项目地址https://gitcode.com/gh_mirrors/bl/bluebird点击查看免费下载相关推荐yfinance 版本演进全解析从 0.0.1 到 1.6.0 的变更日志深度解读yfinance 版本演进全解析从 0.0.1 到 1.6.0 的变更日志深度解读 本篇文章基于仓库根目录 CHANGELOG.rst https://lin数据分析金融科技Floci 版本演进全解析从 1.0.0 到 2.1.0 的变更日志深度解读Floci 版本演进全解析从 1.0.0 到 2.1.0 的变更日志深度解读 Floci 是一个免费开源的本地 AWS 模拟器AWS Local Emulareact-use 版本演进全解析从 1.0.0 到 17.6.1 的变更日志深度解读react use 版本演进全解析从 1.0.0 到 17.6.1 的变更日志深度解读 react use 是一套开箱即用的 React Hooks 集合仓前端上一篇零信任防护Awesome AI Agents安全实践指南下一篇Wekan多项目管理终极指南如何高效跟踪多个相关项目进展创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表