我正在尝试处理正在导入的包(不是我编写的包(中的异常。
例如,第三方软件包中的代码是
Future<Map<String, double>> getLocation() => _channel
.invokeMethod('getLocation')
.then((result) => result.cast<String, double>())
如果我在自己的项目/代码中用try/catch包装对getLocation()
的调用,它就不起作用,因为我的理解是,因为它是异步的,它会通过catchError被转储。
事实上,如果我编辑第三方文件,并添加
.catchError(( e ) { print( 'In getLocation package error' + e.toString() );});
这会捕获异常
然而,该代码不是我编写的程序包,我对编辑该文件犹豫不决。当然,我可以建议一个更改请求,但当它在您不维护的其他包内部时,有没有其他方法可以绕过这些异步错误?
我已经试过了
try {
var test = location.getLocation();
} catch(e) {
print (e.toString());
}
但这并没有捕捉到它,只有我入侵的第三部分代码中的catchError捕捉到了它。
最简单的方法是将async
/await
与try
/catch
一起使用
Future<Map<String, double>> getLocation() async {
try {
var test = await location.getLocation();
} catch (e) {
print(e.toString());
}
}