esroyo/block-react-settle

在将为ReactPHP构建的异步组件集成到传统的阻塞环境中时,添加Promise/settle功能。

dev-develop 2021-11-26 19:40 UTC

This package is auto-updated.

Last update: 2024-09-27 01:51:14 UTC


README

builds.sr.ht status Software License Total Downloads

此库在settle功能之上增加了clue/block-react,这使得将异步组件集成到您的传统同步(阻塞)应用程序堆栈变得更加容易。

安装

composer require esroyo/block-react-settle

使用

可以使用settle(array $promises, LoopInterface $loop, $timeout = null)函数等待所有给定的Promise解析或拒绝。

use Esroyo\React\Block;

$promises = [
    $promise1,
    $promise2,
];

$allResults = Block\settle($promises, $loop);

foreach ($allResults as $index => $result) {
    if ($result['state'] === 'fulfilled') {
        echo "Promise $index resolved with: {$result['value']}";
    } elseif ($result['state'] === 'rejected') {
        // Be aware $result['reason'] might usually be an Exception
        // in that case you would use $result['reason']->getMessage()
        echo "Promise $index rejected with: {$result['reason']}";
    }
}

一旦最后一个Promise解析或拒绝,这将返回一个包含“state”键与有效Promise状态相对应的状态关联数组。如果Promise的状态是“已满足”,则数组将包含一个“value”键,映射到Promise的已满足值。如果Promise被拒绝,则数组将包含一个“reason”键,映射到Promise的拒绝原因。

数组键将保持不变,即可以使用它们将返回数组与传递的Promise关联起来。

如果没有给出$timeout,并且任一Promise处于挂起状态,那么这将可能会无限期地等待/阻塞,直到最后一个Promise解决。

如果给出了$timeout,并且一旦超时触发,任一Promise仍然处于挂起状态,这将取消所有挂起的Promise并抛出TimeoutException。这意味着如果您传递一个非常小(或负数)的值,它仍然会启动一个计时器,因此会在未来最早可能的时间触发。