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


namespace HH\Asio;

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

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.


  • $awaitables - The collection of Traversable awaitables.

Return Values



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

  // While this will obviously succeed

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