首页 > 解决方案 > 在 Dart 中减少 try-catch 块的冗长

问题描述

我有很多网络调用,并且 try-catch 块非常冗长,削减这个样板的最佳方法是什么?我想这样替换

  Future<Something> getSomething(String id) async {
    try {
      return await _api.getSomething(id);
    } on DioError catch (error) {
      return Future.error(error.formattedMessage);
    }
  }

能够称呼某物

  Future<Something> getSomething(String id) async {
    networkCall { _api.getSomething(id); }
  }

Dart 中是否有可以让我实现这一目标的构造?

标签: flutterdart

解决方案


不,没有语言功能可以满足您的需求。

如果您只是希望函数完成DioError并且不需要创建新的异常,您可以删除 try/catch 块并让调用者处理错误。

如果您确实想经常对特定类型的异常进行一些处理,您总是可以编写一个包装器方法来做到这一点:

Future<T> handleDioError<T>(Future<T> Function() f) async {
  try {
    return await f();
  } on DioError catch(e) {
    return Future.error(error.formattedMessage);
  }
}

你会像这样使用它:

Future<Something> getSomething(String id) async {
  return await handleDioError(() => _api.getSomething(id));
}

推荐阅读