MST
星途 面试题库

面试题:Flutter复杂业务场景下异步任务错误处理策略

假设你正在开发一个具有多个异步任务并行执行,且部分任务之间存在依赖关系的复杂Flutter应用场景。如何设计一个通用且高效的错误处理策略,能够区分不同类型的错误(如网络错误、数据解析错误等),并针对不同类型错误做出相应的用户提示和业务逻辑调整?请详细阐述思路并结合关键代码片段说明。
19.0万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试
  1. 思路阐述
    • 定义错误类型:创建不同的错误类来表示不同类型的错误,如网络错误、数据解析错误等。这样便于区分和处理不同类型错误。
    • 使用Futureasync/await:在Flutter中,Future用于处理异步操作。在异步任务执行过程中,使用try - catch块捕获错误。
    • 错误处理中心:可以创建一个集中的错误处理函数或类,负责接收捕获到的错误,根据错误类型进行不同处理。
    • 用户提示和业务逻辑调整:针对不同类型错误,提供对应的用户提示信息,并根据业务需求调整后续逻辑,比如网络错误时提示用户检查网络,数据解析错误时提示数据格式可能有误等。
  2. 关键代码片段
    • 定义错误类型
class NetworkError extends Error {}
class DataParseError extends Error {}
- **异步任务及错误捕获**
Future<void> fetchData() async {
    try {
        // 模拟网络请求,可能会抛出网络错误
        await Future.delayed(const Duration(seconds: 2));
        if (DateTime.now().second % 2 == 0) {
            throw NetworkError();
        }
        // 模拟数据解析,可能会抛出数据解析错误
        var data = 'invalid json';
        // 这里假设jsonDecode会因为数据格式问题抛出异常
        var parsedData = jsonDecode(data);
    } catch (e) {
        if (e is NetworkError) {
            handleError(e, '网络错误,请检查网络连接');
        } else if (e is DataParseError) {
            handleError(e, '数据解析错误,数据格式可能有误');
        } else {
            handleError(e, '未知错误');
        }
    }
}
- **错误处理函数**
void handleError(Error error, String message) {
    // 这里可以记录错误日志
    print('Error: $message');
    // 可以根据业务逻辑进行调整,例如重试等操作
    // 同时可以通过Flutter的消息提示框架(如ScaffoldMessenger)向用户显示提示信息
}
- **调用异步任务**
void main() {
    fetchData();
}