我對異步世界頗爲陌生。在使用任何庫之前,我都會首先嚐試使用回調來完成所有任務。我想我有一個關閉問題,但不知道該怎麼做。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語句來調用回調,但這可能是另一天的討論。