HH\Asio\mmw

Returns an Awaitable of Map of ResultOrExceptionWrapper after a mapping operation has been applied to each value in the provided KeyedTraversable.

Description

function HH\Asio\mmw(
  KeyedTraversable<Tk,Tv> $inputs,
  callable $callable,
): Awaitable<Map<Tk,HH\Asio\ResultOrExceptionWrapper<Tr>>>

Returns an Awaitable of Map of ResultOrExceptionWrapper after a mapping operation has been applied to each value in the provided KeyedTraversable.

This function is similar to mm(), except the Map in the returned Awaitable contains values of ResultOrExceptionWrapper instead of raw values.

This function is similar to Map::map(), but the mapping of the values is done using Awaitables.

This function is called mmw because we are returning a map, doing a mapping operation and each value member in the Map is wrapped by a ResultOrExceptionWrapper.

$callable must return an Awaitable.

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

Parameters

  • KeyedTraversable<Tk,Tv> $inputs - The KeyedTraversable of values to map.
  • callable $callable - The callable containing the Awaitable operation to apply to $inputs.

Return Values

Examples

<?hh

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

// Map a map of numbers to their integer half
// throwing if they can't be divided evenly
$halves = \HH\Asio\join(\HH\Asio\mmw(
  Map {
    'one' => 1,
    'two' => 2,
    'three' => 3,
    'four' => 4,
  },

  async ($val) ==> {
    if ($val % 2) {
      throw new \Exception("$val is an odd number");
    } else {
      return $val / 2;
    }
  },
));

foreach($halves as $num => $result) {
  if ($result->isSucceeded()) {
    echo "$num / two Success: ";
    var_dump($result->getResult());
  } else {
    echo "$num / two Failed: ";
    var_dump($result->getException()->getMessage());
  }
}
Output
one / two Failed: string(18) "1 is an odd number"
two / two Success: int(1)
three / two Failed: string(18) "3 is an odd number"
four / two Success: int(2)