ReactPHP和Promises

时间:2017-02-08 18:57:26

标签: php asynchronous promise reactphp

我试图使用ReactPHP来理解Promise的概念

$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 个答案:

答案 0 :(得分:1)

我根本不知道reactphp,但如果承诺像JS中的promises一样工作,似乎你需要在->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并没有像你想象的那样“解决承诺”,它创造并返回一个已经解决的承诺 - 你放弃了!