我有一个表单,我会通过Websocket发送数据。
我希望收到回复,然后继续。
@CustomTag('register-user-sign')
class RegisterUserModule extends PolymerElement {
@observable String email = "";
@observable String pass = "";
RegisterUserModule.created() : super.created();
void send() {
WebSocket ws;
var index;
index = new Store('demo', 'infos');
index.open()
.then((_) => ws = index.getByKey('wsocket'))
.whenComplete((_) {
if (ws != null && ws.readyState == WebSocket.OPEN) {
ws.send({'email': email, 'pass': pass});
// wait here the response ?
}
});
}
}
有可能吗?还是有其他解决方案?
答案 0 :(得分:1)
WebSocket.send是非阻塞的,您应该使用onMessage方法并处理Stream以接收您的响应
ws.send({'email': email, 'pass': pass});
ws.onMessage.listen((e) {
handleMessage(e.data);
});
答案 1 :(得分:1)
我在Completer课程中找到了另一个解决方案。
Voilà:
Completer _completer;
Future<String> send(Map data) {
_ws.send(JSON.encode(data));
_completer = new Completer();
return _completer.future;
}
void _get_data() {
_ws.onMessage.listen((MessageEvent data) {
_completer.complete(data.data);
});
}