是否可以使用socket io执行类似的操作:
socket.on('event.here', async (data) => {
const result:any = await webservice();
}
我不太确定该怎么做?
答案 0 :(得分:4)
是的,你可以做到,但这取决于你想做什么。如果你想能够在回调中等待一些异步操作而不是你所有的设置。但是如果你想让下一个事件在前一个事件的处理完成之前没有开火,那么它就不会那样工作。
这是一个小模拟:
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', {});
你可以玩它here来感受一下,事实上SocketIO与它的工作无关。