Python的Promises/A+实现
项目描述
Promise
这是Python中Promise的实现。它是Promises/A+的超集,旨在拥有可读性、高性能的代码,并提供仅适用于Python中使用Promise的绝对必要的扩展。
它与Promises/A+规范完全兼容
安装
$ pip install pypromise
用法
以下示例展示了如何加载promise库。然后演示如何从头创建一个promise。您只需调用Promise(fn)。有关此方法返回的内容的完整规范,请参阅Promises/A+。
from promise import Promise
promise = Promise(
lambda resolve, reject: resolve('RESOLVED!')
)
API
在所有示例之前,您需要
from promise import Promise
Promise(resolver)
此方法创建并返回一个新的promise。 resolver必须是一个函数。该resolver函数传递两个参数
resolve应使用单个参数调用。如果它以非promise值调用,则promise将使用该值实现。如果它以promise(A)调用,则返回的promise将采取该新promise(A)的状态。
reject应使用单个参数调用。返回的promise将使用该参数拒绝。
静态函数
这些方法是通过调用Promise.methodName来调用的。
Promise.resolve(value)
将值和外部承诺转换为Promises/A+承诺。如果你传入一个值,它将返回一个对应值的承诺。如果你传入一个类似于承诺的对象(例如jQuery的承诺尝试),它将返回一个承诺,该承诺将承担value的状态(拒绝或解决)。
Promise.reject(value)
返回一个带有给定值的拒绝承诺。
Promise.all(list)
返回一个列表的承诺。如果它只接受一个参数,那么它返回一个承诺,该承诺是对该列表的副本,并将任何承诺替换为其解决的值。例如:
p = Promise.all([Promise.resolve('a'), 'b', Promise.resolve('c')]) \
.then(lambda res: res == ['a', 'b', 'c'])
assert p.value is True
实例方法
这些方法通过调用myPromise.methodName在承诺实例上调用。
promise.then(on_fulfilled, on_rejected)
此方法遵循Promises/A+规范。它解释得非常清楚,所以我建议您阅读它。
on_fulfilled或on_rejected将被调用,并且它们不会被调用超过一次。它们将传递一个单个参数,并且总是异步调用(在下一次事件循环中)。
如果承诺得到解决,则调用on_fulfilled。如果承诺被拒绝,则调用on_rejected。
.then的调用也返回一个承诺。如果调用的处理程序返回一个承诺,.then返回的承诺将承担该返回承诺的状态。如果调用的处理程序返回一个不是承诺的值,.then返回的承诺将用该值解决。如果调用的处理程序抛出一个异常,则.then返回的承诺将用该异常拒绝。
promise.catch(on_rejected)
这是promise.then(None, on_rejected)的简写,以反映同步代码中的catch。
promise.done(on_fulfilled, on_rejected)
与.then相同的意义,但是它不返回承诺,并且任何异常都会被重新抛出,以便可以记录(在非浏览器环境中崩溃应用程序)。
其他包函数
is_thenable(obj)
此函数检查obj是否是Promise,或者可以promisify。
promisify(obj)
此函数如果可能,将obj包装成Promise。Python Future得到支持,在解决时通过promise.done调用回调。
注意
此包受到aplus的强烈启发。
许可证
项目详情
pypromise-0.4.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 54ef0ccde1e0dab3478cd2cc7211213f1c360eda0de39c0ee4321d4d12deffb1 |
|
MD5 | 14991ab65536764130a1239db5172a08 |
|
BLAKE2b-256 | 600c051e825255eb642a1f92688c9956a7a93f1d6d29ee4042c7828c3df946f9 |