重构 catch 语句

问题描述 投票:0回答:3

我们的代码中有许多 try-catch 块来处理 api 调用的异常。由于大多数 catch 块都是相同的,我们希望重构它们并且仅重构它们(因为 try 块应该保留在它们所在的位置)。这在 Flutter 中怎么可能?

示例代码:

try {
  _userData = apiService.call("user_data");
} on ResourceNotFoundException {
  handleResourceNotFoundException();
} on NetworkException {
  handleNetworkException();
}
flutter exception try-catch
3个回答
2
投票

我发现的最佳解决方案是使用通用的

catch
,将所有内容放入
handleException
函数中,然后再次重新抛出异常。

try {
  _userData = apiService.call("user_data");
} on catch (e) {
  handleException(e);
}


void handleException(e) {
   try {
      throw e;
   } on ResourceNotFoundException {
      handleResourceNotFoundException();
   } on NetworkException {
      handleNetworkException();
   }
 }

这样就可以重用异常处理逻辑并扩展它。


0
投票

您应该向 API 调用添加一些抽象,这意味着您应该添加一个函数,该函数接受您尝试调用的 API 调用作为参数,并用 try-catch 块包围它,并在那里处理所有异常。

这样您就可以将 API 调用逻辑与处理异常分开。


0
投票

如果出现重复的 try catch 块,使用通用函数在一个地方处理错误也是一种方便的解决方案。

  Future<T> _fetchDataAndHandleErrors<T>(Future<T> Function() callback) async {
    try {
      return await callback();
    } on ResourceNotFoundException {
      handleResourceNotFoundException();
    } on NetworkException {
      handleNetworkException();
    }
    ...
  }

在您的情况下,您将像这样调用

_fetchDataAndHandleErrors
函数:

  Future<UserData> getUserData() async {
    return await _fetchDataAndHandleErrors(
      () async {
        userData = apiService.call("user_data");
        return userData;
      },
    );
  }
© www.soinside.com 2019 - 2024. All rights reserved.