Promises
Awesome Promises
¶
> JavaScript Promises的有用资源的精选列表
灵感来自于 awesome 列出的东西. 不要与其他令人敬畏的承诺相混淆,比如“我向你保证一百万美元”或“我保证你会保持健康,永远不必再去健身房”.
Resources, Blogs, and Books¶
For beginners¶
- Promise Cookbook - 原因,内容和方式. “简介[...]主要针对前端开发人员”.
- Promises for Asynchronous Programming - 章节来自 Exploring ES6
- You Don't Know JS: Promises - 章节来自 You Don't Know JS: Async & Performance
- JavaScript Promises: an Introduction - JavaScript本机承诺实现的基础知识.
- JavaScript with Promises - 来自O'Reilly. 精炼到位. 使用原生和蓝鸟.
- Promise it won't hurt - 互动 nodeschool 作坊
- ES6 Kata Promises - 身体承诺: Basics
- ES6 Promises in Depth
- An Incremental Tutorial on Promises - 面向初学者的常见问题解答风格教程.
Deep Dive¶
- Promise Fun - @ sindresorhus的常见Promise问题的注释,模式和解决方案
- You're Missing the Point of Promises - Promise不仅仅是回调聚合,而jQuery的实现(3.0之前)是不够的.
- We have a problem with promises - “我们中的许多人在没有真正理解他们的情况下使用承诺.”
- Promise anti-patterns - 常见的误用以及如何避免它们.
- Promise anti-patterns (2) - 另一套承诺反模式
- Promise Ponderings, (Anti-)Patterns, and Apologies - 承诺行为通过常见问题及其答案得到证明和解释.
- Javascript Promises...In Wicked Detail - 重新创建promise实现
- Writing Promise-Using Specifications - “本文档提供了有关如何编写创建,接受或操纵承诺的规范的指导”
- Async functions - making promises friendly
References¶
- Promises/A+ specification
- caniuse promises
- Fates and States - 快速定义可能的状态.
- Promisees - 为冒险者提供可视化的游乐场.
Promises/A+ Implementations (ES6/ES2015 compatible)¶
Strict Implementations¶
这些实现不超过或少于es6规范. 它们可以制成出色的填充剂,并且与原生承诺非常相容.
- pinkie - Ponyfill. 面向节点,但是 browserifyable . 极其小的实施.
- native-promise-only - Polyfill. 浏览器和节点兼容.
- es6-promise - 选择性填充. rsvp.js的严格规范子集
- lie - 小巧,可浏览,并具有选择性填充.
Implementations with extras¶
所有这些都提供了比语言更多的功能,但仍保持兼容. 节点+浏览器适合所有人.
- bluebird - 功能齐全,性能极佳. 长堆栈跟踪和发电机/协程支持.
- creed - 像Bluebird一样的高性能和全功能,但面向FP. 协同程序,生成器,承诺,ES2015迭代,幻想土地规范.
- rsvp.js - 轻量级,额外的一些. 兼容IE6!
- Q - 原始实现之一. 长堆栈痕迹和其他好东西.
- then/promise - 使用
nodeify
,denodify
和done()
添加小. - when.js - 包含控制流程,功能和实用方法.
Fallbacks¶
- native-or-bluebird - 帮助过渡到完全原生.
- pinkie-promise - 使用原生,或回到'小指'. 非常适合节点库作者.
- any-promise - 加载第一个可用的实现. 浏览器安全.
Convenience Utilities¶
本机和严格符合规范的承诺对于兼容性,面向未来,库作者和浏览器而言非常棒. 但是,像bluebird这样的库会将好东西打包到Promise
构造函数和原型上. 解? 当然很小的模块!
sindresorhus's many Promise utilities (see notes)¶
- delay - 延迟承诺指定的时间.
- pify - Promisify(“denodify”)一个回调式函数.
- loud-rejection - 使未处理的承诺拒绝大声失败而不是默认的无声失败.
- hard-rejection - 使未处理的承诺拒绝立即失败,而不是默认的无声失败
- p-queue - 使用并发控制的Promise队列
- p-break - 打破承诺链
- p-lazy - 创建一个延迟执行的延迟,直到调用
.then()
或.catch()
- p-defer - 创建延期承诺
- p-if - 有条件的承诺链
- p-tap - 点击承诺链而不影响其价值或状态
- p-map - 同时映射承诺
- p-all - 使用可选的有限并发运行promise-returns和async函数
- p-limit - 运行具有有限并发性的多个promise-returns和async函数
- p-times - 同时运行promise-returns和async函数特定次数
- p-catch-if - 条件承诺捕获处理程序
- p-time - 衡量承诺解决的时间
- p-log - 记录承诺的值/错误
- p-filter - 同时过滤承诺
- p-settle - 同时解决承诺并获得履行价值或拒绝原因
- p-memoize - Memoize promise-returns和async函数
- p-whilst - 当条件返回true时重复调用函数,然后解析promise
- p-throttle - 节流承诺 - 返回和异步功能
- p-debounce - 去抖承诺 - 返回和异步功能
- p-retry - 重试promise-returns或async函数
- p-wait-for - 等待条件成立
- p-timeout - 在指定的时间后超时承诺
- p-race - 更好的
Promise.race()
- p-try -
Promise#try()
ponyfill - Starts a promise chain - p-finally -
Promise#finally()
ponyfill - Invoked when the promise is settled regardless of outcome - p-any - 等待任何承诺得到履行
- p-some - Wait for a specified number of promises to be fulfilled
- p-pipe - 将promise-returns和async函数编写到可重用的管道中
- p-each-series - 连续迭代承诺
- p-map-series - 按顺序映射承诺
- p-reduce - 使用promises将值列表减少为值的承诺
- p-props - 像
Promise.all()
,但是对于Map
和Object
Others¶
- promise-method - 独立
bluebird.method
. 将同步返回方法转换为promise返回方法. - is-promise - 确定某些东西是否像Promise.
- sprom - 流结束时解析. 可选缓冲(小心这个!)
- task.js - 使用promises和generator以阻塞样式编写异步函数. 喜欢
bluebird.coroutine
. - co - 像
task.js
和bluebird.coroutine
,但也支持thunks. - lie-fs - 承诺Node的FS API的包装器.
- promise-do-until - 重复调用函数,直到条件返回true,然后解析promise.
- promise-do-whilst - 当条件返回true时重复调用函数,然后解析promise.
- promise-semaphore - 以可配置的串行方式完成一系列工作
- promise-nodeify - 独立的
nodeify
方法,在解析或拒绝时调用节点式回调.