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 - 来自奥莱利. 简明扼要. 使用本地和蓝鸟.
- 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 - Promises 不仅仅是回调聚合,而且 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 - 重新创建承诺实现
- 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 规范. 它们制作了很棒的 polyfill,并且与原生 promise 非常兼容.
- pinkie - 小马菲尔. 面向节点,但是 browserifyable . 非常小的实现.
- native-promise-only - 填充. 浏览器和节点兼容.
- es6-promise - 选择加入 polyfill. rsvp.js 的严格规范子集.
- lie - 小巧,可通过选择加入的 polyfill 进行浏览器验证.
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 - 使用原生,或回退到
pinkie
. 非常适合节点库作者. - 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 - 使用可选的有限并发并发运行承诺返回和异步函数
- p-limit - 以有限的并发运行多个承诺返回和异步函数
- p-times - 同时运行承诺返回和异步函数特定次数
- p-catch-if - 条件承诺捕获处理程序
- p-time - 测量承诺解决所需的时间
- p-log - 记录承诺的价值/错误
- p-filter - 同时过滤承诺
- p-settle - 同时结算承诺并获得他们的履行价值或拒绝原因
- p-memoize - 记住承诺返回和异步功能
- p-whilst - 在条件返回 true 时重复调用函数,然后 resolve the promise
- p-throttle - 限制承诺返回和异步功能
- p-debounce - 消除承诺返回和异步功能
- p-retry - 重试承诺返回或异步功能
- 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 - 等待指定数量的承诺被履行
- p-pipe - 将承诺返回和异步函数组合成可重用的管道
- p-each-series - 连续迭代承诺
- p-map-series - 连续映射承诺
- p-reduce - 使用 promises 将值列表简化为一个值的 promise
- p-props - 类似于
Promise.all()
但用于Map
和Object
Others¶
- promise-method - 独立的“bluebird.method”. 将一个同步返回的方法变成一个承诺返回的方法.
- is-promise - 确定某些东西是否看起来像 Promise.
- sprom - 解决流结束时的问题. 可选缓冲(小心这个!)
- task.js - 使用承诺和生成器以阻塞方式编写异步函数. 比如
bluebird.coroutine
. - co - 类似于
task.js
和bluebird.coroutine
,但也支持 thunk. - lie-fs - Node 的 FS API 的承诺包装器.
- promise-do-until - 重复调用一个函数,直到条件返回 true,然后 resolve promise.
- promise-do-whilst - 在条件返回 true 时重复调用函数,然后解决承诺.
- promise-semaphore - 以可配置的串行方式推送一组要完成的工作
- promise-nodeify - 独立的
nodeify
方法,在解决或拒绝时调用 Node 风格的回调.