我试图使用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完成时脚本会得到结果的话)。
答案 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
并没有像你想象的那样“解决承诺”,它创造并返回一个已经解决的承诺 - 你放弃了!