【发布时间】:2015-09-18 23:33:24
【问题描述】:
我对异步世界很陌生。在使用那里的任何库之前,我首先尝试使用回调来做所有事情。我想我有一个关闭问题,但不知道该怎么办。
这里有一些代码:
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 语句来调用回调,但这可能是另一天的讨论。
【问题讨论】:
标签: javascript node.js asynchronous redis socket.io