使用socketio可以与socket.on一起使用异步

An-*_*oid 4 node.js promise socket.io typescript

是否可以使用io套接字执行类似的操作:

socket.on('event.here', async (data) => {
     const result:any = await webservice();
}
Run Code Online (Sandbox Code Playgroud)

我不太确定该怎么做?

gur*_*dev 6

是的,您可以执行此操作,但这取决于您要执行的操作。如果您希望能够在回调中等待一些异步操作,那么就不妨了。但是,如果您希望下一个事件在上一个事件的处理完成之前不触发,那么它将无法正常工作。

这是一个小模拟:

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', {});
Run Code Online (Sandbox Code Playgroud)

您可以在这里使用它来感受一下,实际上SocketIO与它的工作能力无关。