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<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.




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

async function basic_usage_main(): Awaitable<void> {
  $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 = await $handles;
  foreach ($results as $result) {
    if ($result->isSucceeded()) {
      echo "Success: ";
    } else {
      echo "Failed: ";