build/extracted-examples/guides/hack/15-asynchronous-operations/28-guidelines/await-no-loop.hack (27 lines of code) (raw):
// WARNING: Contains some auto-generated boilerplate code, see:
// HHVM\UserDocumentation\MarkdownExt\ExtractedCodeBlocks\FilterBase::addBoilerplate
namespace HHVM\UserDocumentation\Guides\Hack\AsynchronousOperations\Guidelines\AwaitNoLoop;
use namespace HH\Lib\Vec;
class User {
public string $name;
protected function __construct(string $name) {
$this->name = $name;
}
public static function get_name(int $id): User {
return new User(\str_shuffle("ABCDEFGHIJ").\strval($id));
}
}
async function load_user(int $id): Awaitable<User> {
// Load user from somewhere (e.g., database).
// Fake it for now
return User::get_name($id);
}
async function load_users_no_loop(vec<int> $ids): Awaitable<vec<User>> {
return await Vec\map_async(
$ids,
async $id ==> await load_user($id),
);
}
<<__EntryPoint>>
function runMe(): void {
\init_docs_autoloader();
$ids = vec[1, 2, 5, 99, 332];
$result = \HH\Asio\join(load_users_no_loop($ids));
\var_dump($result[4]->name);
}