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 进行,因此我是否遗漏了一些明显的内容,或者这只是我不应该使用的模式。
从您的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)