MST

星途 面试题库

面试题:Flutter中async/await模式的基本原理及应用

请解释Flutter中async/await模式的基本原理,并举例说明在一个网络请求场景下如何使用async/await来处理异步操作,包括如何捕获可能出现的异常。
27.8万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试

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 完成,并捕获可能出现的异常。