2017-02-08 4 views
1

Ich versuche, das Konzept von Versprechen zu verstehen ReactPHP mitReactPHP und Promises

$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); 

Aber $response gesendet wird, bevor $result bereit ist. Wie kann man so etwas wie warten auf $promise so senden ich $result richtig?

Ich habe versucht, $response->end zu another->then() Abschnitt verschieben, aber dann bekomme ich keine Antwort im Browser (d. H. Das Skript erhält ein Ergebnis, wenn $ app = Funktion bereits fertig ist).

Antwort

1

Ich weiß nicht, reactphp überhaupt, aber wenn Versprechen wie Versprechen in JS zum Beispiel funktionieren, scheint wie Sie die Antwort in der ->then schreiben müssen, wo Sie ein Ergebnis haben!

$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); 

Hinweis: Die folgende Zeile im Code

\React\Promise\resolve($promise); 

macht keinen Sinn. \React\Promise\resolve löst nicht das Versprechen, wie Sie zu denken scheinen, es erstellt und gibt ein aufgelöstes Versprechen zurück - das Sie verwerfen!