Ինչու է ասինխրոն ֆունկցիան անմիջապես չի վերադարձնում նշված տիպը։
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-ը թույլ է տալիս խուսափել այդպիսի բլոկավորումից: