面试题答案
一键面试Future的使用场景
- 网络请求:在Flutter应用中,向服务器获取数据或提交数据时,网络操作是异步的,可使用
Future
。例如从API获取用户信息。 - 文件读取与写入:读取或写入文件内容时,这些I/O操作可能需要一些时间,使用
Future
可以避免阻塞主线程。 - 数据库操作:例如查询或插入数据到本地数据库,操作过程可能耗时,通过
Future
实现异步执行。
错误处理示例
import 'dart:async';
Future<String> fetchData() async {
// 模拟一个异步操作,这里简单使用延迟来模拟
await Future.delayed(const Duration(seconds: 2));
// 模拟一个错误,例如网络问题导致数据获取失败
throw Exception('Network error');
}
void main() {
fetchData().then((value) {
print('Data fetched: $value');
}).catchError((error) {
print('Error occurred: $error');
// 展示合适的错误信息,例如可以在UI中显示
// 假设这里有一个显示错误信息的函数showError
showError('Network issue, please check your connection.');
});
}
// 使用async/await方式进行错误处理
void main2() async {
try {
String data = await fetchData();
print('Data fetched: $data');
} catch (error) {
print('Error occurred: $error');
// 展示合适的错误信息
showError('Network problem, retry later.');
}
}
void showError(String errorMessage) {
// 实际应用中这里实现具体的错误信息展示逻辑,例如弹出一个对话框
print('Showing error: $errorMessage');
}
在上述代码中,fetchData
函数模拟了一个异步操作,并抛出一个异常来模拟错误。then
方法的catchError
可以捕获错误并处理。使用async/await
时,try-catch
块能够捕获异步操作中的错误,从而进行相应的错误处理和展示合适的错误信息。