Можно ли сделать что-то подобное с socket io :
socket.on('event.here', async (data) => {
const result:any = await webservice();
}
Я не совсем уверен, как это сделать?
Можно ли сделать что-то подобное с socket io :
socket.on('event.here', async (data) => {
const result:any = await webservice();
}
Я не совсем уверен, как это сделать?
Да, вы можете это сделать, но это зависит от того, что вы хотите сделать. Если вы хотите иметь возможность ждать какой-либо асинхронной операции внутри обратного вызова, то все готово. Но если вы хотите, чтобы следующее событие не срабатывало до завершения обработки предыдущего, это не сработает.
Вот небольшая симуляция:
let socket = {
listeners: [],
on: function(name, callback) {
if (!this.listeners[name]) {
this.listeners[name] = [];
}
this.listeners[name].push(callback);
},
emit: function(name, data) {
if (this.listeners[name]) {
this.callListeners(this.listeners[name], data);
}
},
callListeners: function(listeners, data) {
listeners.shift()(data);
if (listeners.length) {
this.callListeners(listeners, data);
}
}
}
function returnsPromise() {
return new Promise((resolve) => {
setTimeout(() => {
resolve();
}, 1000);
})
}
socket.on('event.here', async (data) => {
const result = await returnsPromise();
console.log('after await');
});
socket.on('event.here', async (data) => {
const result = await returnsPromise();
console.log('after await1');
});
socket.emit('event.here', {});
Вы можете поиграть с ним здесь, чтобы почувствовать, на самом деле SocketIO не имеет ничего общего с его способностью работать.