我有这个设置
//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);
})
});
});