Sobes.tech
Junior

Ինչպես է աշխատում await բանալի բառը Flutter-ում ասինխրոն ծրագրավորման մեջ։

sobes.tech AI

Պատասխան AI-ից

Կողմնորոշիչ await-ը օգտագործվում է ասինխրոն ֆունկցիաներում (նշված async բանալի բառով), որպեսզի դադարեցնի ֆունկցիայի կատարմանը մինչև Future-ը ավարտվի և վերադարձնի արդյունքը:

Աշխատանքի սկզբունքը՝

  1. Երբ կատարման ընթացքը հասնում է await-ով նշված տողին, ընթացիկ ֆունկցիան դադարեցվում է:
  2. Կառավարումը վերադառնում է կանչող կոդին (կամ իրադարձությունների ցիկլին), թույլ տալով ծրագրի այլ մասերին շարունակել աշխատանքը: Սա կանխում է UI-ի բլոկավորումը:
  3. Երբ Future-ը, որի վրա await-ը հղում է, ավարտվում է (այսինքն, իր ասինխրոն գործողությունը կատարում և վերադարձնում արժեք կամ նետում արտահայտություն), դադարեցված ֆունկցիան վերականգնվում է այն վայրից, որտեղից դադարեցվել էր:
  4. Եթե Future-ը հաջողությամբ ավարտվել է, Future-ը վերադարձած արժեքը դառնում է await արտահայտության արդյունքը:
  5. Եթե 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-ին վերագրվում է վերադարձած արժեքը։