我在dart函数中有一个try..catch
。当await client.post
抛出错误时,它在catch之后没有继续,为什么?
@override
Future<http.Response> post(url, {Map<String, String?>? headers, body, Encoding? encoding, BuildContext? context}) async {
headers = await prepareHeaders(headers);
http.Response? response = null;
try {
response = await client.post(url, headers: headers as Map<String, String>?, body: body, encoding: encoding);
} catch (_) {
debugPrint('test'); // It comes here
}
// Does not come here
log(url: url, type: 'POST', body: body as String?, response: response!);
return await parse(response, context: context);
}
3条答案
按热度按时间eufgjt7s1#
它不应该这样做。在catch下面的代码中,你依赖于正在设置的响应对象。如果post错误,那就不是这样了,会产生更多的错误。将log和return调用移到try块中。
k5ifujac2#
您的代码几乎可以肯定在
catch
代码块之后继续;如果client.post
抛出了一个异常,那么response
将不会被设置,并且将保留它的初始值null
。但是,在catch
块之后,您需要:它Assert
response
不是null
。这将抛出TypeError
。我不知道您为什么没有观察到
TypeError
,但我怀疑您在调用堆栈中的某个较高位置有一个覆盖catch
块,它正在吞噬异常(特别是考虑到您在所显示的代码中使用了catch (_)
)。on
的catch
。Error
。wnrlj8wa3#
函数在
catch
块之后将不会执行,函数将在catch
之后终止,无论何时发生异常,然后调用catch
块。要解决此问题,您可以尝试以下操作。