React PHP 超时总是解决
React PHP timeout always resolves
我在玩 React,想尝试获得一个有效的超时函数。按照(某种程度上)https://github.com/reactphp/promise-timer#timeout 中的示例和单元测试,我想出了:
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");
}
);
}
但是无论我在 Timer\timeout 中设置的时间有多低,这总是会以 "Done" 解决。我错过了什么?
您的代码存在阻塞问题。它同步地解决了承诺。它对事件循环驱动程序没有任何作用return,因此它可以安排超时观察器。
尝试更改您的代码以使用超时作为模拟,例如网络超时。
function uncertainOperation($loop) {
return new React\Promise\Promise(
function ($resolve) use ($loop) {
$loop->addTimer(5, function () {
$resolve("Done");
});
}
);
}
$loop->run();
不幸的是,你必须绕过 React 中的循环。
我在玩 React,想尝试获得一个有效的超时函数。按照(某种程度上)https://github.com/reactphp/promise-timer#timeout 中的示例和单元测试,我想出了:
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");
}
);
}
但是无论我在 Timer\timeout 中设置的时间有多低,这总是会以 "Done" 解决。我错过了什么?
您的代码存在阻塞问题。它同步地解决了承诺。它对事件循环驱动程序没有任何作用return,因此它可以安排超时观察器。
尝试更改您的代码以使用超时作为模拟,例如网络超时。
function uncertainOperation($loop) {
return new React\Promise\Promise(
function ($resolve) use ($loop) {
$loop->addTimer(5, function () {
$resolve("Done");
});
}
);
}
$loop->run();
不幸的是,你必须绕过 React 中的循环。