2014-04-17 2 views
0

У меня есть форма, и я бы послал данные по Websocket.Подождите ответа от 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

Я нашел другое решение с классом Completer.

Вуаля:

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

WebSocket.send не является блокирование, вы должны использовать метод OnMessage и обрабатывать поток, чтобы получить ваш ответ

ws.send({'email': email, 'pass': pass}); 
ws.onMessage.listen((e) { 
    handleMessage(e.data); 
}); 
Смежные вопросы