反应PHP超时总是可以解决

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