当服务器不返回200状态码时,我试图捕获抛出的异常。下面是代码:
late Future<List<Data>> datasFuture;
String _warning = "";
@override
void initState() {
try {
datasFuture = RestfulServiceProvider.fetchDatas();
} on Exception {
_warning = "There is no data to fetch!";
}
super.initState();
}
//RestfulServiceProvider class
static Future<List<Data>> fetchDatas() async {
List jsonResponse = [];
final response =
await http.get(Uri.parse('http://localhost:8080/datas'));
if (response.statusCode == 200) {
jsonResponse = json.decode(response.body);
return jsonResponse.map((data) => Data.fromJson(data)).toList();
} else {
throw Exception();
}
}
当异常发生时,代码没有进入异常块,我无法处理错误。有什么想法或解决方案吗?谢谢。
Try-catch块可以捕获在其块边界内发生的异常。您将不会捕获错误,因为您只是将Future
分配给变量(而不是等待其值)。那么,块可以捕获单个赋值操作的异常吗?不。变量刚刚赋值,程序继续执行并立即退出try-catch块。你必须等待这个值来捕获它。但是你不能在initState
中直接使用async-await语法。所以你有两个选项:
-
catchError of
Future
restfulserviceprovider . fetchdata ().catchError((error){您的代码在这里}));
-
使用async-await将其用于另一个函数
void someFunc () async{ try { await RestfulServiceProvider.fetchDatas(); } on Exception catch(e) { _warning = "There is no data to fetch!"; } }
在initState
中调用它