HH\Asio\mw

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

Description

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

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

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.

Parameters

  • KeyedTraversable<Tk,Awaitable<Tv>> $awaitables - The collection of KeyedTraversable awaitables.

Return Values

Examples

<?hh

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: ";
    var_dump($result->getResult());
  } else {
    echo "$key Failed: ";
    var_dump($result->getException()->getMessage());
  }
}
Output
cache Failed: string(38) "get failed with result mc_res_notfound"
one Success: int(1)