【发布时间】:2019-05-15 10:44:30
【问题描述】:
代码如下:
createOrder(Order order) {
loading.add(true);
_auth.currentUser().asStream().asyncMap((FirebaseUser user) async {
DocumentReference ref = firestore.collection('orders').document();
order = order.copyWith(
uid: user.uid,
createdAt: FieldValue.serverTimestamp(),
updatedAt: FieldValue.serverTimestamp());
return await ref.setData(order.toJson()).catchError((e){
print('OrderBloc catchError: ${e.toString()}');
loading.add(false);
errors.add(ErrorHandler.handle(e));
});
}).listen((data) {
loading.add(false);
createOrderSubject.add(null);
}).onError((e) {
print('OrderBloc: ${e.toString()}');
loading.add(false);
errors.add(ErrorHandler.handle(e));
});
}
问题是当设备上没有可用的互联网连接时,它既不会调用catchError 也不会调用onError。
所以结果是加载微调器永远保持旋转。
我在日志中看到了这个错误:
I/OkHttpClientTransport(16453): javax.net.ssl.SSLException: Write error: ssl=0x7f6856b188: I/O error during system call, Broken pipe
那么为什么 onError 和 catch 错误没有被执行呢?如何解决?
【问题讨论】:
-
_auth.currentUser()仅在用户登录或登录失败时获取值。如果没有网络连接,则这两种情况都不成立。您通常希望在调用_auth.currentUser()之前检测到网络连接的缺失,或者在代码中设置超时以放弃尝试。 -
SSLException 怎么样,它没有被捕获,为什么?
-
如果在建立安全连接时出现问题,这很可能发生在客户端。这通常会引发常规异常,而
onError用于服务器上发生的错误。 -
在这种情况下有没有办法捕获客户端异常?
标签: dart flutter google-cloud-firestore