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 = function уже завершена).

1 ответ

Я вообще не знаю responsephp, но если обещания работают как обещания в 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 не "разрешает обещание", как вы, кажется, думаете, оно создает и возвращает решенное обещание, которое вы отбрасываете!

Другие вопросы по тегам