【发布时间】:2017-05-15 04:56:10
【问题描述】:
我正在尝试使用 Hack async 实现 Rx 流/可观察合并,并且标题描述了一个核心步骤。此步骤的代码版本如下所示:
<?hh // strict
async function foo(Awaitable<Iterable<T>> $collection): Awaitable<void> {
$ordered_generator = async_collection_to_gen($collection) // (**)
foreach($ordered_generator await as $v) {
// do something with each awaited value in the time-order they are resolved
}
}
但是,经过仔细考虑,我认为我可以编写已加星标的(**) 函数。我发现在某些时候,我尝试过的实现需要类似于 JS 的 Promise.race 的功能,它在集合 Promises 中的第一个解决/拒绝时解决。然而,所有Hack's Awaitable collection helpers 都创建了一个完全 解析集合的Awaitable。此外,Hack 不允许我们不使用来自 async functions 的 await 异步调用,我也发现这是必要的。
有人知道吗?
【问题讨论】:
标签: asynchronous async-await generator hacklang