2016-01-04 3 views
0

Je veux stocker les valeurs de retour de fonctions à variable et les utiliser après cela mais javascript n'attend pas la fonction donc quand le code continue il semble être indéfiniJavascript n'attend pas que les valeurs retournées soient stockées

PAS Dupliquer Je ne parle pas CALLBACK

Voici le code:

function register (name,user,pass) 
{ 
    var userex = checkUserExistance(user); 
    var nameex = checkNameExistance(name); 
    var globalex = nameex || userex; 
    var done = false; 
    if (!(globalex)) { 
     connection.query("INSERT INTO users (`name`,`user`,`pwd`) VALUES ('" + name + "','" + user + "','" + pass + "')", function (err, rows, fields) { 
      if (!err) { 
       done = true; 
      } else { 
       var today = new Date(); 
       console.log(today.toGMTString()); 
       console.log(err); 
      } 
      return { "ex": {"user":userex,"name":nameex}, "done": done }; 
     }); 
    } 
} 
+0

Une meilleure explication est peut-être nécessaire. Il y a deux fonctions, dont on retourne indéfini? Veuillez montrer la variable assignée à, et l'appel de fonction. – buffjape

+0

ils retournent tous les deux la valeur, mais javascript ne les attend pas, donc il reste indéfini jusqu'à ce que la fonction ait terminé –

+0

ok, alors c'est un doublon comme marqué. Meilleurs vœux. – buffjape

Répondre

0

semble être un support fermante manquante.

function register (name,user,pass) 
{ 
    ... 
    if (!(globalex)) { 
     connection.query("INSERT INTO users (`name`,`user`,`pwd`) VALUES ('" + name + "','" + user + "','" + pass + "')", function (err, rows, fields) { 
     if (!err) { 
      done = true; 
     } else { 
      var today = new Date(); 
      console.log(today.toGMTString()); 
      console.log(err); 
     } 

     // *** Returning from the anonymous function *** 
     return { "ex": {"user":userex,"name":nameex}, "done": done }; 
    }); // *** End of anonymous function 
} // *** end if *** 

// Still inside the register() function here, no value returned. 
+0

Oui, il y a un '}' manquant dans le code affiché, mais l'instruction return est toujours dans le rappel fourni à 'connection.query' et ne reviendra pas de' register', donc cela ne répond pas vraiment le problème sous-jacent. Je soupçonne que l'OP doit commencer à passer un rappel à 'register', comme discuté dans la question en double. –

+0

ne s'en soucie pas je l'ai juste copié rapidement ce n'est pas l'erreur! –