我怎样才能在Socket.IO上下文中等待promises

时间:2017-06-16 01:33:26

标签: javascript node.js sockets promise

我有这个设置

//Client Side


 socket.emit('some_event');


//Server Side


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

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

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

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

因为我将使用promises调用那个API很多,我的大部分客户端/服务器实时通信将通过Socket.IO有明显的东西,我缺少或这只是一个模式,我不应该使用

1 个答案:

答案 0 :(得分:4)

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);
      })
   });
});