1

React/Promise が解決されたら、関数呼び出しから戻る必要があります。基本的な考え方は、非同期呼び出しから同期呼び出しを偽装することです。つまり、promise が解決または拒否されると、外側の関数は値を返さなければなりません。

これは React/Mysql を使用して RedBeanPHP 用のドライバーを作成することです。これにより、React イベント ループで CPU が枯渇する可能性が高いことは承知しています。

私の最初のアイデアは、ジェネレーターを使用してから、\React\Promise\Deferred::thenコールバック内で yield を呼び出すことでした。

function synchronous()
{
    $result = asynchronous();
}

function asynchronous()
{
    $deferred = new \React\Promise\Deferred;

    $sleep = function() use ($deferred)
    {
        sleep(5);
        $deferred->resolve(true);
    };

    $deferred->then(function($ret) {
        yield $ret;
    });

    $sleep();
}

PHP ジェネレーター クラスである AFAICT は、PHP エンジン自体によってのみ直接構築可能です。then コールバックは、これが機能するために、非同期関数のジェネレーターで send を直接呼び出す必要があります。

4

1 に答える 1