我对异步的世界很新。在使用任何库之前,我首先尝试使用回调执行所有操作。我想我有一个关闭问题,但不知道该怎么办。
以下是一些代码:
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语句来调用回调,但这可能是另一天的讨论。
答案 0 :(得分:0)
这是一个关闭问题!只是不是我所期待的。
我也是,嗯,不太懂。
回调不是问题,在redis响应函数中可以访问变量。我原以为在parent / ancestor函数中声明的任何变量都可用于children / decedent函数。
在这个例子中,我需要在循环中创建一个函数,并显式传递变量,使其在闭包内可用。
这是stackoverflow问题,它指出了我正确的方向:
How can I access the key passed to hgetall when using node_redis?