HH\Asio\vw

Translate a Traversable of Awaitables into a single Awaitable of Vector of ResultOrExceptionWrapper.

Description

function HH\Asio\vw(
  Traversable<Awaitable<Tv>> $awaitables,
): Awaitable<Vector<HH\Asio\ResultOrExceptionWrapper<Tv>>>

Translate a Traversable of Awaitables into a single Awaitable of Vector of ResultOrExceptionWrapper.

This function is the same as v(), but wraps the results into ResultOrExceptionWrappers.

This function takes any Traversable object of Awaitables (i.e., each member of the Traversable is of type of Awaitable, likely from a call to a function that returned Awaitable<T>), and transforms those Awaitables into one big Awaitable Vector of ResultOrExceptionWrapper.

This function is called vw because we are returning a vector of Awaitable wrapped into ResultofExceptionWrappers.

The ResultOrExceptionWrappers in the Vector of the returned Awaitable are not available until you await or join the returned Awaitable.

Parameters

  • Traversable<Awaitable<Tv>> $awaitables - The collection of Traversable awaitables.

Return Values

Examples

<?hh

namespace Hack\UserDocumentation\API\Examples\HH\Asio\vw;

async function one(): Awaitable<int> {
  return 1;
}

$mcr = \MCRouter::createSimple(ImmVector {});

$handles = \HH\Asio\vw(Vector {
  // This will throw an exception, since there's no servers to speak to
  $mcr->get("no-such-key"),

  // While this will obviously succeed
  one(),
});

$results = \HH\Asio\join($handles);
foreach($results as $result) {
  if ($result->isSucceeded()) {
    echo "Success: ";
    var_dump($result->getResult());
  } else {
    echo "Failed: ";
    var_dump($result->getException()->getMessage());
  }
}
Output
Failed: string(38) "get failed with result mc_res_notfound"
Success: int(1)