我有这个设置
//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有明显的东西,我缺少或这只是一个模式,我不应该使用
答案 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);
})
});
});