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 中的循环。