我正在尝试处理我正在导入的程序包(不是我编写的程序包)中的异常。
例如,第三方包装中的代码是
Future<Map<String, double>> getLocation() => _channel
.invokeMethod('getLocation')
.then((result) => result.cast<String, double>())
如果我在try / catch中将自己的项目/代码中的调用包装为
getLocation()
,它将无法正常工作,因为我的理解是,由于异步,它将通过catchError转储。确实,如果我编辑第3方文件并添加
.catchError(( e ) { print( 'In getLocation package error' + e.toString() );});
这捕获了异常(exception)
但是,该代码不是我编写的程序包,我不愿意编辑该文件。我自然可以提出变更请求,但是当其他异步错误出现在您不需要维护的其他软件包中时,还有其他方法可以解决这些异步错误吗?
我已经尝试过
try {
var test = location.getLocation();
} catch(e) {
print (e.toString());
}
但这并不能捕获它,只有我破解的第3部分代码中的catchError可以捕获。
最佳答案
最简单的方法是将async
/ await
与try
/ catch
一起使用
Future<Map<String, double>> getLocation() async {
try {
var test = await location.getLocation();
} catch (e) {
print(e.toString());
}
}