title: What is the point of Guzzle async promises?
body: <p>With Guzzle, do promises provide any real utility? It seems that you <em>must</em> call wait(). The following code (from the docs) seems to do nothing by itself:</p>
  
  <pre><code>$promise = $client-&gt;requestAsync('GET', 'http://httpbin.org/get');
  $promise-&gt;then(
      function (ResponseInterface $res) {
          echo $res-&gt;getStatusCode() . "\n";
      },
      function (RequestException $e) {
          echo $e-&gt;getMessage() . "\n";
          echo $e-&gt;getRequest()-&gt;getMethod();
      }
  );
  </code></pre>
  
  <p>If you must call $promise->wait() to make the request, what's the point of a promise? How is this really any different than:</p>
  
  <pre><code>$request = new Request('GET', 'http://httpbin.org/get');
  $response = $client-&gt;send($request); 
  
  if ($response
  </code></pre>
  
  <p>Best I can tell, the only benefit is it's convenient approach to define the request success and failure callbacks. Even the doc section on making multiple requests has the code below, which appears to block and execute all requests... perhaps at the "same time". Is this all I should expect? </p>
  
  <pre><code>// Wait on all of the requests to complete.
  $results = Promise\unwrap($promises);
  </code></pre>