跳转到主要内容

Python的Promises/A+实现

项目描述

Promise

这是Python中Promise的实现。它是Promises/A+的超集,旨在拥有可读性、高性能的代码,并提供仅适用于Python中使用Promise的绝对必要的扩展。

它与Promises/A+规范完全兼容

travis pypi coveralls

安装

$ 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函数传递两个参数

  1. resolve应使用单个参数调用。如果它以非promise值调用,则promise将使用该值实现。如果它以promise(A)调用,则返回的promise将采取该新promise(A)的状态。

  2. 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_fulfilledon_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的强烈启发。

许可证

MIT许可

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

pypromise-0.4.tar.gz (6.8 kB 查看散列)

上传时间

支持者: