簡體   English   中英

socket.io-從匿名函數中發出

[英]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問題:

使用node_redis時如何訪問傳遞給hgetall的密鑰?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM