Translate a KeyedTraversable of Awaitables into a single Awaitable of Map of key/ResultOrExceptionWrapper pairs


namespace HH\Asio;

function mw<Tk, Tv>(
  KeyedTraversable<Tk, Awaitable<Tv>> $awaitables,
): Awaitable<Map<Tk, HH\Asio\ResultOrExceptionWrapper<Tv>>>;

This function is the same as m(), but wraps the results into key/ResultOrExceptionWrapper pairs.

This function takes any KeyedTraversable object of Awaitables (i.e., each member of the KeyedTraversable has a value of type Awaitable, likely from a call to a function that returned Awaitable<T>), and transforms those Awaitables into one big Awaitable Map of key/ResultOrExceptionWrapper pairs.

This function is called mw because we are returning a map of Awaitable wrapped into ResultofExceptionWrappers.

The ResultOrExceptionWrapper values in the Map of the returned Awaitable are not available until you await or join the returned Awaitable.


Return Values



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

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

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

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

  // While this will obviously succeed
  'one' => one(),

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