Awaiting generators

Since every async function is implemented as a generator function, simply calling it will not have any effects. Instead, you have to yield the generator. await-generator will still resume your function when the yielded generator finished running, and send you the value returned by the yielded generator.

function a(): Generator {
	// some other async logic here
	return 1;
}

function main(): Generator {
	$a = yield $this->a();
	var_dump($a);
}

It is easy to forget to yield the generator.

Handling errors

await-generator will make your yield throw an exception if the generator function you called threw an exception. You can use try-catch to handle these exceptions.

function err(): Generator {
	// some other async logic here
	throw new Exception("Test");
}

function main(): Generator {
	try {
		err();
	} catch(Exception $e) {
		var_dump($e->getMessage()); // string(4) "Test"
	}
}