[英]socket.io - emitting from within an anonymous function
我對異步世界很陌生。 我首先嘗試使用回調進行所有操作,然后再使用那里的任何庫。 我認為我有一個關閉問題,但不知道該怎么辦。
這是一些代碼:
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語句來調用回調,但這可能是另一天的討論。
這是一個關閉問題! 只是不是我所期望的。
我也,嗯,不是很了解。
回調不是問題,讓變量在redis響應函數內部可訪問。 我本以為在父/祖先函數中聲明的任何變量都可用於子/子孫函數。
在這種情況下,我需要在循環內創建一個函數,並顯式傳遞變量以使其在閉包內可用。
這是為我指明正確方向的stackoverflow問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.