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 を直接呼び出す必要があります。