Flutter Dart Completer.complete()结果永远无法解析
我有一个函数,它返回的未来取决于要解析的回调结果:Flutter Dart Completer.complete()结果永远无法解析,flutter,dart,Flutter,Dart,我有一个函数,它返回的未来取决于要解析的回调结果: Future connectSocket(String email, String password, {Function onConnectCallback}) async { var completer = new Completer(); print("Connecting..."); var query = getQueryString(email, password); socketIO = aw
Future connectSocket(String email, String password, {Function onConnectCallback}) async {
var completer = new Completer();
print("Connecting...");
var query = getQueryString(email, password);
socketIO = await SocketIOManager().createInstance(SocketOptions(localDomainWindows, query: query));
socketIO.on("loginError", (data) {
print("Login err");
_connected = false;
connectedCallback();
completer.complete(false);
});
socketIO.onConnect((data) {
print("***CONNECTED***");
_connected = true;
completer.complete(true);
connectedCallback();
});
socketIO.connect();
return completer.future;
}
我可以看到,***已连接***
打印到控制台,我的套接字服务器确认连接,但函数等待
-如果解决方案从未恢复,它只是挂起
socketConnection.connectSocket(_email, _password)
.then((success) {
print("SUCCESS") // never gets printed
}
对此唯一可能的解释是,回调中的某些代码阻止了您的程序继续运行,因为
Completer.complete
应始终使未来的完成。
但是,如果它被阻止,事件循环将永远无法调用您的代码
由于bool
赋值永远不应该被阻塞(\u connected=true;
),函数中唯一可以停止程序的部分是connectedCallack()代码>。如果您删除或修复它,您应该会看到将来的完成。您能在print语句之后调用completer.complete
吗?@creativecreatormormaybeno我没有将complete()调用移到print语句之前,它就起作用了。。。抓住我了。如果你想把它放在一个答案中,我会把它标记为接受,因为它是connectedCallback()代码>调用以某种方式阻止它。它在另一个组件中调用setState()
,我猜它搞乱了什么