Junior
Jak funguje klíčové slovo await v asynchronním programování na Flutteru?
sobes.tech AI
Odpověď od AI
Klíčové slovo await se používá v asynchronních funkcích (označených klíčovým slovem async) k pozastavení provádění funkce, dokud se Future nedokončí a nevrátí výsledek.
Princip fungování:
- Když provádění dosáhne řádku s
await, aktuální funkce je pozastavena. - Kontrola je vrácena volajícímu kódu (nebo event loopu), což umožňuje, aby se provedly jiné části programu. To zabraňuje zablokování UI.
- Když se
Future, na který odkazujeawait, dokončí (tedy provede svou asynchronní operaci a vrátí hodnotu nebo vyhodí výjimku), pozastavená funkce se obnoví od místa, kde byla přerušena. - Pokud se
Futureúspěšně dokončil, hodnota vrácenáFuturese stává výsledkem výrazuawait. - Pokud
Futureskončil chybou (vyhodil výjimku), bude tato výjimka vyhozena na místě voláníawait.
Příklad:
// Asynchronní funkce označená jako `async`
Future<String> fetchData() async {
// Simulace asynchronní operace (například síťový požadavek)
await Future.delayed(Duration(seconds: 2));
return 'Data ze sítě!';
}
void main() async {
print('Začátek získávání dat...');
// Použití `await` k čekání na dokončení Future
try {
String data = await fetchData();
print('Získáno: $data');
} catch (e) {
print('Chyba při získávání dat: $e');
}
print('Program byl ukončen (i když `await` může stále běžet)');
}
V tomto příkladu je main označena jako async, aby mohla používat await. Volání await fetchData() pozastaví provádění main na 2 sekundy, aniž by blokovalo hlavní vlákno UI. Zatímco fetchData čeká, mohou ostatní části aplikace pokračovat v práci. Jakmile fetchData skončí, pokračuje provádění main a proměnné data je přiřazena vrácená hodnota.