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

namespace HH\Asio;

function mmw<Tk as arraykey, Tv, Tr>(
  KeyedTraversable<Tk, Tv> $inputs,
  (function(Tv): Awaitable<Tr>) $callable,
): Awaitable<Map<Tk, ResultOrExceptionWrapper<Tr>>>;

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.




// 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: ";
  } else {
    echo "$num / two Failed: ";
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)