4

私は、reactPHP で js のような約束を実装しようとしています。しかし、何らかの理由でメソッドが同期的に実行されend_at、promise が解決された後にのみ出力されます。

コード:

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().


}); 
4

2 に答える 2

5

promise 自体は非同期ではありません。promise 自体は、いくつかのコードを実行してから、成功または失敗に基づいて別のコールバックを実行し、これらの概念のいくつかを連鎖させる機能を提供するだけです。

非同期コードは、タスクに固有のモジュールを使用して実行できます。HTTP リクエストを作成しようとしている場合は、ReactPHPhttp-clientモジュールを使用できます。システム コマンドを非同期で実行する場合は、child-processモジュールの使用を検討してください。

まったく異なることや特注のことをしようとしている場合は、 Predis 非同期ライブラリと同様に、作業を独自の非同期動作に抽象化する必要があります。おそらく promise モジュールを使用して、成功/失敗のコールバックを提供します。

于 2016-01-03T02:47:54.543 に答える