Веб-сокеты могут получать и отправлять данные в обоих направлениях в любое время, тогда как обещания разрешаются только один раз с одним значением.Таким образом, обещания не могут быть правильным инструментом здесь.
Если, однако, вы хотите написать абстракцию вокруг ответа на один запрос , то Promise имеет смысл:
Добавить прослушиватель событий, который прослушивает message
событие, но только прослушайте его один раз и удалите его, отправьте данные и разрешите каждый раз, когда было отправлено событие message
.
Удалите function
, как этоmethod
класса, который вы создаете.
doRequest(data){
return new Promise(resolve => {
this.ws.addEventListener('message', event => {
resolve(event.data);
}, {once: true});
this.ws.send(JSON.stringify(data));
});
}
В вашем конструкторе создайте только экземпляр WebSocket
.
constructor(){
this.ws = new WebSocket(...);
}
И затем используйте его следующим образом:
const socket = new YourWebSocketClass();
socket.doRequest({message: 'hello'}).then(message => {
const data = JSON.parse(message);
});