hhvm/asio-utilities

此包已废弃且不再维护。未建议替代包。

简化异步函数工作的实用工具

安装次数: 1,267

依赖者: 0

建议者: 0

安全: 0

星标: 5

关注者: 9

分支: 6

语言:Hack

v2.4 2015-12-10 19:57 UTC

This package is not auto-updated.

Last update: 2022-01-22 03:24:15 UTC


README

在 HHVM 3.11+ 中已过时

这些函数已合并到 HHVM 中,我们预计从 3.11.0 版本开始将被包含。

安装

  • 在您的 composer.json 中添加 hhvm/asio-utilities

ResultOrExceptionWrapper

在等待多个句柄时,可以隔离每个句柄的异常;ResultOrExceptionWrapper 提供了这个功能

// HH\Asio\wrap(T): Awaitable<ResultOrExceptionWrapper<T>>
$w = await wrap(some_async_function_that_may_throw());
if ($w->isSucceeded()) {
  $result = $w->getResult();
  ...
} else {
  $exception = $w->getException();
  ...
}

映射和过滤函数

HHVM 3.6 及以上版本包含 HH\Asio\v() 和 HH\Asio\m(),以简化对多个等待句柄的等待;通常还需要结合其他选项,如异步函数的映射或过滤。

这些函数的命名根据其属性

首先,根据类型如何接收和返回参数

  • v - Vector
  • m - Map

然后,一个或两个字母表示操作

  • f - filter
  • fk - filter with key
  • m - map
  • mk - map with keys

最后,可选地跟一个 'w' 表示你想要结果或异常包装器。对于 'fw' 函数,行为如下:

  • 如果过滤函数返回 true,则返回包装的元素
  • 如果过滤函数返回 false,则省略元素
  • 如果过滤函数抛出异常,则返回包装的异常

这也可以在没有过滤或映射操作的情况下使用 - vw() 和 mw()。

函数列表

所有函数都在 HH\Asio 命名空间中;v()m() 是 HHVM 3.6 及以上版本内置的。

名称 返回值 映射 过滤 带键 包装 回调
v() Vector<T>
vm() Vector<Tr> (Tv): Awaitable<Tr>
vmk() Vector<Tr> (Tk, Tv): Awaitable<Tr>
vf() Vector<Tv> (Tv): Awaitable<bool>
vfk() Vector<Tv> (Tk, Tv): Awaitable<bool>
vw() Vector<ResultOrExceptionWrapper<T>>
vmw() Vector<ResultOrExceptionWrapper<Tr>> (Tv): Awaitable<Tr>
vmkw() Vector<ResultOrExceptionWrapper<Tr>> (Tk, Tv): Awaitable<Tr>
vfw() Vector<ResultOrExceptionWrapper<Tv>> (Tv): Awaitable<bool>
vfkw() Vector<ResultOrExceptionWrapper<Tv>> (Tk, Tv): Awaitable<bool>
m() Map<Tk, Tv>
mm() Map<Tk, Tr> (Tv): Awaitable<Tr>
mmk() Map<Tk, Tr> (Tk, Tv): Awaitable<Tr>
mf() Map<Tk, Tv> (Tv): Awaitable<bool>
mfk() Map<Tk, Tv> (Tk, Tv): Awaitable<bool>
mw() Map<Tk, ResultOrExceptionWrapper<T>>
mmw() Map<Tk, ResultOrExceptionWrapper<Tr>> (Tv): Awaitable<Tr>
mmkw() Map<Tk, ResultOrExceptionWrapper<Tr>> (Tk, Tv): Awaitable<Tr>
mfw() Map<Tk, ResultOrExceptionWrapper<Tv>> (Tv): Awaitable<bool>
mfkw() Map<Tk, ResultOrExceptionWrapper<Tv>> (Tk, Tv): Awaitable<bool>