esroyo / block-react-settle
在将为ReactPHP构建的异步组件集成到传统的阻塞环境中时,添加Promise/settle功能。
dev-develop
2021-11-26 19:40 UTC
Requires
- php: >=5.4.0
- clue/block-react: ^1.3
- esroyo/react-promise-settle: ^1.0
Requires (Dev)
- phpunit/phpunit: ^7.1 || ^6.4
- react/event-loop: ^1.0
- react/promise: ^2.7
- react/promise-timer: ^1.5
This package is auto-updated.
Last update: 2024-09-27 01:51:14 UTC
README
此库在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
。这意味着如果您传递一个非常小(或负数)的值,它仍然会启动一个计时器,因此会在未来最早可能的时间触发。