我怎么能在 Socket.IO 的背景下等待承诺



我有这个设置

//Client Side

 socket.emit('some_event');

//Server Side

 socket.on('some_event', function(data){
      socket.emit('another_event', getDataFromAPI());
 });

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

function getDataFromAPI(){
   myAPI.getStuffFromId('123456789')
   .then(function(data){
         return data;
   });
 }

如果我以这种方式使用它,则插座中的getDataFromAPI()中将没有任何内容。IO 调用范围,如果我决定打印它,它将null发送到客户端并打印undefined。如果我将其登录到承诺内的控制台,那么我就有数据,但返回它为时已晚。

由于我将大量使用该 API 进行承诺调用,并且我的大多数客户端/服务器实时通信将通过 Socket.IO 进行,因此我是否缺少一些明显的东西,或者这只是我不应该使用的模式。

getDataFromAPI方法返回承诺。

function getDataFromAPI(){
   return myAPI.getStuffFromId('123456789')
     .then(function(data){
         return data;
     });
}

并在承诺解决时发出。

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

最新更新