Junior
Ինչպես է աշխատում await բանալի բառը Flutter-ում ասինխրոն ծրագրավորման մեջ։
sobes.tech AI
Պատասխան AI-ից
Կողմնորոշիչ await-ը օգտագործվում է ասինխրոն ֆունկցիաներում (նշված async բանալի բառով), որպեսզի դադարեցնի ֆունկցիայի կատարմանը մինչև Future-ը ավարտվի և վերադարձնի արդյունքը:
Աշխատանքի սկզբունքը՝
- Երբ կատարման ընթացքը հասնում է
await-ով նշված տողին, ընթացիկ ֆունկցիան դադարեցվում է: - Կառավարումը վերադառնում է կանչող կոդին (կամ իրադարձությունների ցիկլին), թույլ տալով ծրագրի այլ մասերին շարունակել աշխատանքը: Սա կանխում է UI-ի բլոկավորումը:
- Երբ
Future-ը, որի վրաawait-ը հղում է, ավարտվում է (այսինքն, իր ասինխրոն գործողությունը կատարում և վերադարձնում արժեք կամ նետում արտահայտություն), դադարեցված ֆունկցիան վերականգնվում է այն վայրից, որտեղից դադարեցվել էր: - Եթե
Future-ը հաջողությամբ ավարտվել է,Future-ը վերադարձած արժեքը դառնում էawaitարտահայտության արդյունքը: - Եթե
Future-ը ավարտվել է սխալով (արտածել է արտահայտություն), այդ արտահայտությունը կթողարկվիawait-ի տեղ:
Օրինակ՝
// `async`-ով նշված ասինխրոն ֆունկցիա
Future<String> fetchData() async {
// Ասինխրոն գործողության սիմուլյացիա (օրինակ՝ ցանցային հարցում)
await Future.delayed(Duration(seconds: 2));
return 'Ցանցից ստացված տվյալներ!';
}
void main() async {
print('Տվյալների ստացման սկիզբը...');
// `await`-ի օգտագործում՝ սպասելու Future-ի ավարտին
try {
String data = await fetchData();
print('Ստացված՝ $data');
} catch (e) {
print('Սխալ տվյալների ստացման ժամանակ՝ $e');
}
print('Ծրագիրը ավարտվեց (համենայն դեպս, `await`-ը դեռ կարող է աշխատել)');
}
Այս օրինակով main նշված է որպես async, որպեսզի կարողանա օգտագործել await: await fetchData()-ի կանչը դադարեցնում է main-ի կատարմանը 2 վայրկյան, առանց բլոկավորելու հիմնական UI-գիծը: Երբ fetchData սպասում է, մյուս մասերը կարող են շարունակել աշխատել: Երբ fetchData ավարտվի, main-ի կատարմանը վերականգնվում է, և data-ին վերագրվում է վերադարձած արժեքը։