2016-07-06 22 views
2

asycn関数の結果からグローバル変数_userRegisterを作成したいと思います。どうやってするか?asyncorous関数のJavascriptグローバル変数?

/* 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

..あなたの変数は、応答が受け取られたときにのみ初期化されます...あなたは応答を捕まえることができますか?そしてそこで変数を初期化してください... –

+0

そのコードで行われたことはまったくそうではありませんか? _userRegister =データ;すでにそれをグローバルにする必要があります – Mayday

+0

@ Mr.Noddy:私は何のエラーもありません。私は再利用のために '' data''変数をグローバルにすることはできません – Loint

答えて

3

あなたの関数ではなく、約束を返してください。この非同期の値に別の場所でアクセスする必要がある場合は、グローバルにも約束を保存することができます。

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

はまさにこの私は –

+0

'_userRegistering.then(関数(のuserData){; _userRegister =のuserData はconsole.log( "グローバル変数から_ userRegister"、ユーザ・データ)})を示唆したかったです。 log(_userRegister); < - underfine'' 結果を_userRegister変数に保存したい – Loint

+0

@ Ntlzz93できません。さてあなたはすることができますが、値が定義されていることを保証することはできません。 –

0

約束を用いるのが良いです。

しかし、あなたはまた、同様に、コールバック関数を使用して実行フローを制御することで、これを試すことができます:それはASYNコールをSと...だからあなたは未定義になっ

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); 
    }); 
} 

、その後

$(function() { 


    var _userRegister; 

    var socket = io(); 

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

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

}); 
関連する問題