2016-07-06 21 views
2

Ich möchte eine globale Variable _userRegister aus dem Ergebnis der Asycn-Funktion machen. Wie geht das?Javascript globale Variable in asynchronen Funktion?

/* Socket.io-client Function */ 

    function reportSignUp(socket, date) { 
     // sent to socket server 
     socket.emit('report signup', date); 

     // listenning response from server 
     socket.on('users signup', function (data) { 
      // data is the result from server 
      console.log('user register', data); 


      // make data global 
      _userRegister = data; 
     }); 
    } 
    ; 

    /* End Socket.io-client Function */ 

    $(function() { 


     var _userRegister; 

     var socket = io(); 

     var date = getDateTime(); // get current time from system 

     reportSignUp(socket, date); 

     console.log("_userRegister",_userRegister); // <- underfine 
    }); 

</script> 
+0

So Sie undefined bekommen ... Wie es asyn Anruf s .. Ihre Variable wird nur initialisiert, wenn die Antwort empfangen wurde ... Können Sie die Antwort abfangen .. Und Variable dort initialisieren ... –

+0

Ist das nicht genau das, was es mit diesem Code gemacht hat? _userRegister = Daten; sollte schon global machen – Mayday

+0

@ Mr.Noddy: Ich habe keinen Fehler. Ich kann einfach nicht '' data'' Variable global wieder zu verwenden – Loint

Antwort

3

Machen Sie Ihre Funktion stattdessen ein Versprechen zurück. Wenn Sie irgendwo anders auf diesen Async-Wert zugreifen müssen, können Sie auch globale Versprechen speichern.

function reportSignUp(socket, date) { 
    var dfd = $.Deferred(); 
    // sent to socket server 
    socket.emit('report signup', date); 

    // listenning response from server 
    socket.on('users signup', function (data) { 
     // data is the result from server 
     console.log('user register', data); 


     dfd.resolve(data); 
    }); 

    return _userRegistering = dfd.promise(); 
} 

/* End Socket.io-client Function */ 

$(function() { 


    var _userRegister; 

    var socket = io(); 

    var date = getDateTime(); // get current time from system 

    reportSignUp(socket, date).then(function(userData) { 
     console.log("_userRegister", userData); 
    }); 

    // or 

    _userRegistering.then(function(userData) { 
     console.log("_userRegister from global variable", userData); 
    }) 
}); 
+0

Genau dies wollte ich –

+0

'' _userRegistering.then (function (userdata) { console.log ("_ userRegister von den globalen variablen", userdata); _userRegister = userdata; }) vorzuschlagen, '' '' Konsole. log (_userRegister); <- underfine'' Ich möchte das Ergebnis in _userRegister Variable gespeichert werden – Loint

+0

@ Ntlzz93 Sie können nicht. Nun, Sie können, aber Sie können nicht garantieren, dass der Wert definiert ist. –

0

Verwenden Sie Versprechen ist gut.

Sie können aber auch versuchen, diese durch den Ausführungsfluss zu steuern, wie eine Callback-Funktion:

function reportSignUp(socket, date, onSignupCallback) { 
     // sent to socket server 
     socket.emit('report signup', date); 

    // listenning response from server 
    socket.on('users signup', function (data) { 
     // data is the result from server 
     console.log('user register', data); 

     // make data global 
     //_userRegister = data; 
     if(onSignupCallback) onSignupCallback(data); 
    }); 
} 

und dann

$(function() { 


    var _userRegister; 

    var socket = io(); 

    var date = getDateTime(); // get current time from system 

    reportSignUp(socket, date, function(data){ 
     console.log("_userRegister", userData); 
    }); 

}); 
Verwandte Themen