如何在 Socket.IO 上下文中等待承诺

pha*_*unk 0 javascript sockets node.js promise

我有这个设置

//Client Side


 socket.emit('some_event');


//Server Side


 socket.on('some_event', function(data){
      socket.emit('another_event', getDataFromAPI());
 });
Run Code Online (Sandbox Code Playgroud)

问题是我的函数getDataFromAPI()是一个调用,可能需要一些时间,因为它调用外部 API 并使用承诺。类似的东西:

function getDataFromAPI(){
   myAPI.getStuffFromId('123456789')
   .then(function(data){
         return data;
   });
 }
Run Code Online (Sandbox Code Playgroud)

如果我以这种方式使用它,那么getDataFromAPI()socket.IO 调用范围中将没有任何内容发送null到客户端并undefined在我决定打印时进行打印。如果我将它登录到 promise 内的控制台,那么我就有了数据,但是返回它有点太晚了。

由于我将大量使用带有该 API 的 Promise 调用,并且我的大部分客户端/服务器实时通信将通过 Socket.IO 进行,因此我是否遗漏了一些明显的内容,或者这只是我不应该使用的模式。

Ber*_*ert 5

从您的getDataFromAPI方法返回承诺。

function getDataFromAPI(){
   return myAPI.getStuffFromId('123456789')
     .then(function(data){
         return data;
     });
}
Run Code Online (Sandbox Code Playgroud)

并在承诺解决时发出。

io.on('connection', function(socket){
   socket.on('some_event', function(data){
      getDataFromAPI().then(function(apiData){
          socket.emit('another_event', apiData);
      })
   });
});
Run Code Online (Sandbox Code Playgroud)