HH\Asio\vfw

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

Description

function HH\Asio\vfw(
  KeyedTraversable<Tk,T> $inputs,
  callable $callable,
): Awaitable<Vector<HH\Asio\ResultOrExceptionWrapper<T>>>

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

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

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

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

$callable must return an Awaitable of bool.

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

Parameters

  • KeyedTraversable<Tk,T> $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\vfw;

// Return all non-negative odd numbers
// Positive evens filtered out,
// Negatives and zero cause exception
$odds = \HH\Asio\join(\HH\Asio\vfw(
  Vector { -1, 0, 1, 2, 3, 4 },

  async ($val) ==> {
    if ($val <= 0) {
      throw new \Exception("$val is non-positive");
    } else {
      return ($val % 2) == 1;
    }
  },
));

foreach($odds 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 non-positive"
Failed: string(17) "0 is non-positive"
Success: int(1)
Success: int(3)