gpt4 book ai didi

flutter - Dart Completer.complete()结果永远无法解决

转载 作者:行者123 更新时间:2023-12-03 03:38:40 32 4
gpt4 key购买 nike

我有一个返回 future 的函数,该函数取决于要解决的回调结果:

   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;
}

我可以看到 ***CONNECTED***打印到控制台,并且我的套接字服务器确认了该连接,但是 await函数-解析度永远不会恢复,它只是挂起。
    socketConnection.connectSocket(_email, _password)
.then((success) {
print("SUCCESS") // never gets printed
}

最佳答案

对此的唯一可能解释是,回调中的某些代码阻止您的程序继续运行,因为Completer.complete否则应始终使future完整。
但是,如果被阻止,则事件循环将永远无法调用您的代码。

因为bool分配永远都不会阻塞(_connected = true;),所以函数中可能会暂停程序的唯一部分是connectedCallack();。如果您删除或修复它,则应该可以看到将来的完成。

关于flutter - Dart Completer.complete()结果永远无法解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58895207/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com