2016-07-29 12 views
0
handler: function(item){ 
    var info; 
    Database.getInfo(item, function(data){ 
     if(data) 
      info = data.information 
    }); 
    // Socket.io join handler 
    socket['user'].join(info) 
} 

Jetzt versuche ich, die info innerhalb der Database.getInfo, um es mit der Buchse zu senden.Rückruf variable Einstellung später als die Funktion löst

Immer wenn ich socket['user'].join(info) innerhalb des Rückrufs von Database.getInfo verwende, bekomme ich die TypeError: Object #<Object> has no method 'join'.

Und draußen, wie Sie erhalte ich eine leere var erraten kann, da der Rückruf die Variable nach dem join() setzt genannt wird ..

Was kann ich tun, um die info vom Database.getInfo zu bekommen, um es den Einsatz mysend Steckdose?

+0

Wenn Sie sagen, Methodenfehler - wie lautet die Fehlermeldung? Möchten Sie teilen? –

+0

Aus 'socket.io' Dokumentation kann ich sehen, dass es eine' Join'-API gibt, die normalerweise verwendet wird, indem 'socket.join (...)' aufgerufen wird. Ihr Code sieht nicht wie die übliche Art aus '.join' . Was ist wirklich "Sockel"? Möchten Sie mehr von Ihrem Code preisgeben? –

Antwort

0

Der Datenbank-Rückruf ist asynchron. Es wird irgendwann später aufgerufen, während der Rest der handler-Funktion weiterhin ausgeführt wird. Sie können das data Ergebnis nur innerhalb des Callbacks selbst verwenden, da dies der einzige Ort ist, an dem Sie wissen, wann die Informationen tatsächlich verfügbar sind.

handler: function(item){ 
    Database.getInfo(item, function(data){ 
     if(data) { 
      let info = data.information 
      // Socket.io join handler 
      socket['user'].join(info); 
     } 
    }); 
    // any code placed here runs BEFORE the getInfo() callback runs 
} 
+0

Immer wenn ich es innerhalb der calback verwende, bekomme ich den Fehler, dass Join keine Methode hat –

+1

@ J.Doe - Wenn Sie Hilfe mit diesem Fehler möchten, müssen Sie zu Ihrer Frage genau hinzufügen, welchen Code Sie versucht haben und die GENAUE Fehlermeldung Sie bekam. "Join hat keine Methode" ist nicht wahrscheinlich, was die Fehlermeldung für diesen Code sagt. Es könnte etwas darüber aussagen, dass ".join" nicht definiert ist. Wenn das der Fall ist, dann liegt das Problem wahrscheinlich bei 'socket ['user']' was Code ist, den Sie uns nicht zeigen. – jfriend00

+0

@ J.Doe - Dann ist das ein anderes Problem. Anscheinend haben Sie 'socket' oder' socket ['user'] 'noch nicht gesetzt, wenn Sie versuchen, es zu benutzen. Es ist nichts in Ihrer Frage offenbart, das uns hilft, damit zu helfen. Das Bit darüber, wann Sie Daten in einem asynchronen Callback verwenden können, ist Asynchronous Javascript basics 101. Sie müssen es auf diese Weise tun. Das wird dazu führen, dass Sie auch Ihr anderes Problem mit 'socket ['user']' beheben müssen. – jfriend00