2015-09-08 4 views
2

Я пытаюсь реализовать js-подобные обещания с помощью реакцииPHP. Но почему-то методы, выполненные синхронно, end_at напечатаны только после того, как обетование разрешено.promPHP обещания исполняются синхронно

Код:

function iterate() { 


    $deferred = new \React\Promise\Deferred(); 

    sleep(2); 

    $deferred->resolve(); 

    return $deferred->promise(); 

} 

Route::get('test/async', function() { 


    echo "start execution at ".time()."<br>"; // this executed first 

    iterate()->then(function($result) { 
     echo "got result result at ". time() . "<br>"; // this is second 
    }, function($error) { 

    }, function ($finally) { 

    }); 


    echo "end at " . time(); // this is executed only after then(). 


}); 

ответ

1

Само обещание не асинхронно. Само обещание просто дает вам возможность запускать код, а затем другой обратный вызов, основанный на успехе или неудаче, а затем объединить несколько этих понятий вместе.

Асинхронный код может быть выполнен с использованием модуля, специфичного для вашей задачи. Если вы пытаетесь сделать HTTP-запрос, вы можете использовать ReactPHPhttp-client. Если вы хотите выполнить системную команду асинхронно, вы можете использовать модуль child-process.

Если вы ищете что-то совершенно иное или сделанное на заказ, вы должны абстрагировать работу на свое асинхронное поведение, подобное Predis async library. Возможно, используя модуль обещаний, чтобы обеспечить обратные вызовы с успехом/сбоем.

 Смежные вопросы

  • Нет связанных вопросов^_^