HH\Asio\vmw

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

Description

function HH\Asio\vmw(
  Traversable<Tv> $inputs,
  HH\Asio\(function(Tv):Awaitable<Tr>) $callable,
): Awaitable<Vector<HH\Asio\ResultOrExceptionWrapper<Tr>>>

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

This function is similar to vm(), except the Vector in the returned Awaitable contains ResultOrExceptionWrappers instead of raw values.

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

This function is called vmw because we are returning a vector, doing a mapping operation and each member of the Vector is wrapped by a ResultOrExceptionWrapper.

$callable must return an Awaitable.

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

Parameters

  • Traversable<Tv> $inputs - The Traversable of values to map.
  • HH\Asio\(function(Tv):Awaitable<Tr>) $callable - The callable containing the Awaitable operation to apply to $inputs.

Return Values

Examples

<?hh

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

// Map a vector of numbers to half integer half
// throwing if they can't be divided evenly
$halves = \HH\Asio\join(\HH\Asio\vmw(
  Vector { 1, 2, 3, 4 },

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

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