反应PHP超时总是可以解决
问题描述:
我正在玩React并想尝试获得工作超时功能。继(排序)从https://github.com/reactphp/promise-timer#timeout的例子,单元测试,我想出了:反应PHP超时总是可以解决
use React\Promise\Timer;
$promise = uncertainOperation();
$loop = \React\EventLoop\Factory::create();
Timer\timeout($promise, 1, $loop)->then(
function ($value) {
var_dump($value);
}
,
function ($error) {
var_dump($error);
}
);
$loop->run();
function uncertainOperation() {
return new React\Promise\Promise(
function ($resolve) {
for($i = 0; $i < 30000000; $i++) { }
$resolve("Done");
}
);
}
但这始终以“做”解析无论我有多低在定时器\超时的时间。我错过了什么?
答
你的代码的问题是它阻塞。它同步解决了这个承诺。它无处可返回到事件循环驱动程序,以便它可以安排超时监视器。
尝试更改您的代码以使用超时作为模拟例如。网络超时。
function uncertainOperation($loop) {
return new React\Promise\Promise(
function ($resolve) use ($loop) {
$loop->addTimer(5, function() {
$resolve("Done");
});
}
);
}
$loop->run();
不幸的是,你必须传递React中的循环。