Проблема с вашим примером - ожидание того, что эти вызовы должны быть случайными. Асинхронный аспект ReactPHP происходит в основном из цикла обработки событий, который должен быть неблокирующим (как вы упомянули в одном из комментариев ниже). Отсутствие цикла обработки событий означает, что вы используете стандартный стек вызовов PHP.
Если вы хотите увидеть «более асинхронный» подход, вы можете немного изменить свой код.
$loop = \React\EventLoop\Factory::create();
function callDone(){
$g = 'abcdefghuytegbnwsgwseeveddvvdvdcvdvbshasfcfddbbcdgcdvoiuyyttreewwaazxcvbnjjjhgfffhhhabcdefghuytegbnwsgwseeveddvvdvdcvdvbshasfcfddbbcdgcdvoiuyyttreewwaazxcvbnjjjhgfffhhh';
$r = str_split($g);
for($i=0;$i<count($r);$i++){
$g .= $r[$i];
}
return 1;
}
$promise = new React\Promise\Promise(function($resolve){
echo microtime(true). "<br>start<br>";
$resolve(callDone());
});
$promise->then(function($v) use ($loop) {
$loop->addPeriodicTimer(0.1, function () {
echo 'one<br>';
});
});
$promise->then(function($v) use ($loop) {
$loop->addPeriodicTimer(0.2, function () {
echo 'two<br>';
});
});
$promise->then(function($v){
echo 'three<br>';
});
$promise->then(function($v){
echo 'four<br>';
});
$promise->then(function($v){
echo 'five<br>';
});
$loop->run();
Мы добавили цикл обработки событий в ваш код, чтобы начать более асинхронный подход.
Это добавит к вашему примеру асинхронное время, которое будет отображать «один» каждые 0,1 секунды и «два» каждые 0,2 секунды. Как вы можете видеть, эти два таймера не будут блокировать друг друга, потому что цикл обработки обрабатывает эти таймеры.
Надеюсь, это поможет!