Я пытаюсь понять концепцию Обещаний с использованием 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 уже завершена).
Я вообще не знаю 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
не «разрешает обещание», как вы, кажется, думаете, оно создает и возвращает решенное обещание, которое вы отбрасываете!
Других решений пока нет …