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


namespace HH\Asio;

function mmk<Tk, Tv, Tr>(
  KeyedTraversable<Tk, Tv> $inputs,
  (function(Tk,Tv):Awaitable<Tr>) $callable,
): Awaitable<Map<Tk, Tr>>;

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

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

This function is called mmk because we are returning a map and doing a a mapping operation that includes keys.

$callable must return an Awaitable.

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


Return Values



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

 * Query an arbitrary number of URLs in parallel
 * returning them as a Map of string responses.
async function get_urls(
  \ConstMap<string, string> $urls,
): Awaitable<Map<string, string>> {

  // Await on curl requests in parallel and
  // prepend the request ID index
  return await \HH\Asio\mmk(
    async ($name, $url) ==> {
      $content = await \HH\Asio\curl_exec($url);
      return $name . " => " . $content;

$urls = ImmMap {
  'com' => "http://example.com",
  'net' => "http://example.net",
  'org' => "http://example.org",

$pages = \HH\Asio\join(get_urls($urls));
foreach ($pages as $page) {
  echo substr($page, 0, 22) . ' ... ' . substr($page, -8);
com => <!doctype html> ... </html>
net => <!doctype html> ... </html>
org => <!doctype html> ... </html>