【发布时间】:2019-06-28 13:31:28
【问题描述】:
我在 MyWebSocket 类中使用 WebSocket 变量。对于 listen,我给出一个回调函数作为参数。
如果此回调函数在调用类MyChat 时抛出异常,那么我无法在任何地方捕获该异常。
我的简化代码是:
class MyWebSocket {
WebSocket _ws;
...
// initialized in controller: _ws = WebSocket.connect(_some_url_);
// everything works (connect, listen)
...
void listen({void Function(dynamic) myOnListen}) {
try {
_ws.listen(myOnListen)
.onError((e) => print("MyWebSocket in MyChat.onError: $e"));
} catch (e) {
print("Catched in MyWebSocket: $e");
}
}
}
class MyChat {
MyWebSocket _chatWs = MyWebSocket();
...
void initWS() {
try {
_chatWs.listen(myOnListen: processMsg);
} catch (e) {
print("Catched in MyChat: $e");
}
}
void processMsg(dynamic msg) {
if(_some_stuff_like_invalid_msg_or_not_logged_in_...)
throw Exception("There is my Exception");
}
}
我在每个可能的地方都建立了try-catch 来捕获异常——没有成功,我只有未处理的异常:
E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] 未处理异常:异常:有我的异常
E/flutter:#0 MyChat.processMsg
【问题讨论】: