gpt4 book ai didi

javascript - socket.io - 从匿名函数中发出

转载 作者:可可西里 更新时间:2023-11-01 11:37:13 26 4
gpt4 key购买 nike

我对异步世界还很陌生。在使用任何库之前,我首先尝试使用回调来完成所有事情。我想我遇到了闭包问题,但不知道该怎么办。

这是一些代码:

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 emits 以查明哪里出了问题。

Any 在对 redis 的调用之外发出,按预期工作。我一进入那个匿名函数 - nada。

就是说,我在该函数中设置了 console.log() 的所有内容。我从 Redis 获得了正确的结果,我有正确的用户,并且命名空间已定义。

我只是无法发出结果。

我原以为匿名函数可以访问它之外的范围 - 但反过来却不行。我看不出有什么问题...

另外我知道有些人不喜欢 if 语句来调用回调,但这可能是改天再讨论。

最佳答案

这是一个闭包问题!只是出乎我的意料。

我也是,咳咳,不是很懂。

回调不是问题,在 Redis 响应函数中获取可访问的变量才是问题。我原以为在父/祖先函数中声明的任何变量都可用于子/后代函数。

在这种情况下,我需要在循环内创建一个函数,并显式传递变量以使其在闭包内可用。

这是给我指明正确方向的 stackoverflow 问题:

How can I access the key passed to hgetall when using node_redis?

关于javascript - socket.io - 从匿名函数中发出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31167607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com