Returns an Awaitable of Map after a filtering operation has been applied to each key and value in the provided KeyedTraversable


function mfk<Tk, Tv>(
  KeyedTraversable<Tk, Tv> $inputs,
  (function(Tk,Tv):Awaitable<bool>) $callable,
): Awaitable<Map<Tk, Tv>>

This function is similar to mf(), but passes element keys to the callable as well.

This function is similar to Map::filterWithKey(), but the filtering of the keys and values is done using Awaitables.

This function is called mfk because we are returning a map, doing a a filtering operation that includes keys.

$callable must return an Awaitable of bool.

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


  • $inputs - The KeyedTraversable of keys and values to filter.
  • $callable - The callable containing the Awaitable operation to apply to $inputs.

Return Values



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

enum COLOR: int {
  RED = 1;
  ORANGE = 2;
  YELLOW = 3;
  GREEN = 4;
  BLUE = 5;
  INDIGO = 6;
  VIOLET = 7;

$fruits = ImmMap {
  'Apple' => COLOR::RED,
  'Banana' => COLOR::YELLOW,
  'Grape' => COLOR::GREEN,
  'Orange' => COLOR::ORANGE,
  'Pineapple' => COLOR::YELLOW,
  'Tangerine' => COLOR::ORANGE,

// Similar to $times->filter(...)
// But awaits the awaitable result of the callback
// rather than using it directly
$not_self_named = \HH\Asio\join(\HH\Asio\mfk(

  // Exclude fruits who's name is the same as their color
  async ($name, $color) ==> strcasecmp($name, COLOR::getNames()[$color]),

foreach($not_self_named as $fruit => $color) {
  echo $fruit, 's are ', COLOR::getNames()[$color], "\n";
Apples are RED
Bananas are YELLOW
Grapes are GREEN
Pineapples are YELLOW
Tangerines are ORANGE