Skip to Content

Async/Await trong Dart

1. Giới thiệu

Dart sử dụng asyncawait để xử lý bất đồng bộ, tương tự JavaScript:

Future<String> fetchData() async { await Future.delayed(Duration(seconds: 2)); return "Data loaded"; } void main() async { print("Loading..."); var data = await fetchData(); print(data); // Data loaded (sau 2 giây) }

2. Future

Future đại diện cho giá trị sẽ có trong tương lai:

Future<int> calculateSum() { return Future.delayed( Duration(seconds: 1), () => 10 + 20 ); } void main() async { var sum = await calculateSum(); print(sum); // 30 (sau 1 giây) }

3. Async Function

Hàm async luôn trả về Future:

Future<String> greet() async { return "Hello"; } // Tương đương với: Future<String> greet() { return Future.value("Hello"); }

4. Await

await chỉ dùng trong async function:

void loadData() async { print("Start loading"); var data = await fetchData(); // Đợi kết quả print("Data: $data"); }

5. Error Handling

Future<String> fetchData() async { throw Exception("Network error"); } void main() async { try { var data = await fetchData(); print(data); } catch (e) { print("Error: $e"); } }

6. Multiple Futures

6.1. Sequential

void loadSequential() async { var data1 = await fetchData1(); // Đợi var data2 = await fetchData2(); // Đợi print("$data1, $data2"); }

6.2. Parallel

void loadParallel() async { var results = await Future.wait([ fetchData1(), fetchData2(), ]); print(results); }

7. then() và catchError()

fetchData() .then((data) => print("Success: $data")) .catchError((error) => print("Error: $error"));

8. Ví dụ thực tế

import 'dart:convert'; import 'package:http/http.dart' as http; Future<Map<String, dynamic>> fetchUser(int id) async { final response = await http.get( Uri.parse('https://api.example.com/users/$id') ); if (response.statusCode == 200) { return jsonDecode(response.body); } else { throw Exception('Failed to load user'); } } void main() async { try { var user = await fetchUser(1); print("User: ${user['name']}"); } catch (e) { print("Error: $e"); } }

9. So sánh với Kotlin

DartKotlinGhi chú
Futuresuspend funAsync function
asyncsuspendKeyword
awaitawaitWait for result
Future.wait()async { }Parallel execution

📝 Tóm tắt

  • Future - Giá trị bất đồng bộ
  • async - Đánh dấu hàm bất đồng bộ
  • await - Đợi kết quả
  • try-catch - Error handling
  • Future.wait() - Chạy song song
  • then(), catchError() - Callback style
Last updated on