build/extracted-examples/guides/hack/15-asynchronous-operations/28-guidelines/await-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\AwaitLoop;
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_await_loop(vec<int> $ids): Awaitable<vec<User>> {
$result = vec[];
foreach ($ids as $id) {
$result[] = await load_user($id);
}
return $result;
}
<<__EntryPoint>>
function runMe(): void {
\init_docs_autoloader();
$ids = vec[1, 2, 5, 99, 332];
$result = \HH\Asio\join(load_users_await_loop($ids));
\var_dump($result[4]->name);
}