ReactPHP и обещания

Я пытаюсь понять концепцию промисов с помощью ReactPHP.

$app = function ($request, $response) use ($redis, $config) {

    $promise = React\Promise\all(
        array(
            AsyncGetUser(),
            AsyncGetDB(),
            AsyncGetTemplate()
        )
    )->then(function ($res) {
        $result = ParseTemplate($user, $template, $whatever);
    }

    \React\Promise\resolve($promise);


    $response->writeHead(200, array('Content-Type' => 'text/plain'));
    $response->end($result);

}

$http->on('request', $app);

Но $response отправляется до того, как $result будет готово. Как сделать что-то вроде ожидания для $promise, чтобы я правильно отправил $result?

Я пытался переместить $response->end в раздел another->then(), но тогда я не получаю никакого ответа в браузере (т.е. скрипт получает результат, когда функция $app = уже завершена).


person Alex Boroda    schedule 08.02.2017    source источник


Ответы (1)


Я вообще не знаю, что такое reactphp, но если обещания работают как обещания в JS, например, похоже, вам нужно написать ответ в ->then, где у вас есть результат!

$app = function ($request, $response) use ($redis, $config) {
    $promise = React\Promise\all(
        array(
            AsyncGetUser(),
            AsyncGetDB(),
            AsyncGetTemplate()
        )
    )->then(function ($res) {
        $result = ParseTemplate($user, $template, $whatever);
        $response->writeHead(200, array('Content-Type' => 'text/plain'));
        $response->end($result);
    }
}

$http->on('request', $app);

Примечание: следующая строка в вашем коде

\React\Promise\resolve($promise);

не имеет смысла. \React\Promise\resolve не "разрешает обещание", как вы думаете, он создает и возвращает разрешенное обещание, которое вы отбрасываете!

person Jaromanda X    schedule 09.02.2017