Sobes.tech
Middle

Ինչու է ասինխրոն ֆունկցիան անմիջապես չի վերադարձնում նշված տիպը։

sobes.tech AI

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

Flutter/Dart-ում ասինխրոն ֆունկցիան անմիջապես չի վերադարձնի նշված տիպը, քանի որ այն իրականացնում է ժամանակ պահանջող գործողություն (օրինակ՝ ցանցային հարցում, ֆայլի ընթերցում): Փոխարենը, որ բլոկավորի գործարկման հոսքը մինչև գործողության ավարտը, ասինխրոն ֆունկցիան անմիջապես վերադարձնում է Future:

Future-ը օբյեկտ է, որը ներկայացնում է հնարավոր արժեք կամ սխալ, որը հասանելի կլինի ապագայում: Այն որպես խոստում է, որ գործողությունը կավարտվի, և երբ դա տեղի ունենա, արդյունքը կլինի կամ նշված տիպի արժեք, կամ սխալ:

Future-ի օգտագործումը թույլ է տալիս հիմնական գործարկման հոսքին (հիմնական იზոլատ) շարունակել այլ առաջադրանքներ մշակել, առանց սպասելու ասինխրոն գործողության ավարտին: Երբ գործողությունը ավարտվի, Future-ը տեղեկացնում է դրա մասին, և գրանցված կոդը (օրինակ, .then() կամ await) կարող է մշակել արդյունքը:

Օրինակ՝

Future<String> fetchData() async {
  // Ուղեղի երկար գործողության իմիտացիա
  await Future.delayed(Duration(seconds: 2));
  return "Տվյալները ստացվեցին!";
}

void main() {
  print("Սկիզբ");
  fetchData().then((data) {
    print(data); // Կատարում է `Future`-ի ավարտից հետո
  });
  print("Ավարտ"); // Կատարվում է անմիջապես, առանց սպասելու fetchData-ին
}

Այս կոդի ելքը կլինի՝

Սկիզբ
Ավարտ
Տվյալները ստացվեցին!

Այսպիսով, դա ցույց է տալիս, որ գործարկումը չի խանգարում ծրագրի գործելուն: Եթե fetchData անմիջապես վերադարձներ String, ծրագիրը կկապվի 2 վայրկյան, նախքան «Ավարտ»-ը տպելը: Future-ը թույլ է տալիս խուսափել այդպիսի բլոկավորումից: