面试题答案
一键面试1. async/await 基本原理
async
用于定义一个异步函数,该函数总是返回一个Future
。当函数执行到await
关键字时,它会暂停函数的执行,直到await
后面的Future
完成(resolved)。一旦Future
完成,await
表达式会返回Future
的结果,然后函数继续执行。- 例如,定义一个异步函数:
asyncFunction() async {
// 异步操作,比如网络请求
}
这个函数会自动返回一个 Future
。
2. 网络请求场景下使用 async/await 示例
假设使用 http
包进行网络请求(需先添加依赖 http: ^0.13.4
):
import 'package:http/http.dart' as http;
Future<String> fetchData() async {
try {
var response = await http.get(Uri.parse('https://example.com/api/data'));
if (response.statusCode == 200) {
return response.body;
} else {
throw Exception('Failed to load data, status code: ${response.statusCode}');
}
} catch (e) {
// 捕获网络请求可能出现的异常,比如网络不通等
print('An error occurred: $e');
rethrow; // 重新抛出异常,以便调用者也能处理
}
}
在调用处使用:
void main() async {
try {
var data = await fetchData();
print('Fetched data: $data');
} catch (e) {
print('Caught in main: $e');
}
}
在上述示例中,fetchData
函数使用 async
定义为异步函数。await
等待网络请求 http.get
完成,根据响应状态码处理结果或抛出异常。在 main
函数中同样使用 await
等待 fetchData
完成,并捕获可能出现的异常。