我对异步世界颇为陌生。在使用任何库之前,我都会首先尝试使用回调来完成所有任务。我想我有一个关闭问题,但不知道该怎么做。socket.io - 从匿名函数内发射
下面是一些代码:
namespace.on('connection', function(socket){
var newClient = socket.id//just in case the a new user logged on between declaration and use
socket.join('room1')
function newConnection(positionCallback, hashCallback, newUser){
namespace.to(socket.id).emit('hello', {yo:'works'})
for(var i=0; i< cardCounter ;i++){
var keyVal = 'card:'+ cardArray[i]
redis.hgetall(keyVal, function (err, storedMsg) {
namespace.to(socket.id).emit('hello', {yo:'doesnt work'})
hashCallback(storedMsg, newUser)
});
if(i==cardCounter-1){
positionCallback()
}
}
}
function onConnectionComplete(){
namespace.to(socket.id).emit('hello', {yo:'works'})
}
function onHashComplete(hashObject, newUser){
namespace.to(newUser).emit('hello', {yo:'doesnt work'})
}
newConnection(onConnectionComplete, onHashComplete, newClient)
}
我已经把一些socketio发出周围准确判断出问题的地方。
任何在redis调用之外发出的按照预期工作。只要我进入那个匿名函数 - nada。
这就是说,我有console.log()'该函数内的一切。我从redis获得正确的结果,我拥有合适的用户,并且定义了命名空间。
我只是不能发出结果。
我原以为匿名函数可以访问它外面的范围 - 但不是相反。我不明白什么是不能通过...
另外我知道有些人不喜欢if语句来调用回调,但这可能是另一天的讨论。