Aller au contenu

[JS] faire un return d'un callback [ Résolu ]


lordv

Messages recommandés

salut tout le monde !

merci de m'aider :)

j'ai cette classe

var db_users = new function () {
   this.table = "users";

   /**this.count**/
   this.count = function (param) {
       var db = db_connect();
       if (db) {
           var qry = "SELECT COUNT(*) FROM " + this.table + " ";
           if (param)
               qry += param;

           var nbr;
           db.query(qry, function (res, errorNo) {
               if (errorNo) Ape.log('Request error : ' + errorNo + ' : ' + this.errorString());
               else {
                   //Ape.log('Fetching ' + res.length + " Users  : " + res);
                   //renvoyer res a celui qui a appele db_users.count();
                   //nbr = res;
               }
           });
           //Affichage de nbr
       }
       else
           Ape.log("no connect");
   }
   /**this.get**/
   this.get = function () {

   }
   /**this.getAll**/
   this.getAll = function () {

   }
}

et j'aimerais pouvoir compter le nombre d'utilisateur de la table users ainsi

var nbr_u = db_users.count();

j'aimerais pouvoir récupérer le contenu de la variable res mais le code n'est pas synchrone

après avoir appelé db.query le code continu sans pour autant attendre le callback .

existe t'il un moyen de renvoyer res a nbr_u ?

merci :smack:

Lien vers le commentaire
Partager sur d’autres sites

Ca devrait donner quelque chose du genre :


var db_users = new function () {
     this.table = "users";

    this.count = function (param, cb) {
             var db = db_connect();
             if (db) {
                     var qry = "SELECT COUNT(*) FROM " + this.table + " ";
                     if (param)
                                 qry += param;

                     var nbr;
                     db.query(qry, function (res, errorNo) {
                             if (errorNo) Ape.log('Request error : ' + errorNo + ' : ' + this.errorString());
                             else {
                                     cb(res);
                             }
                     });
             }
             else
                         Ape.log("no connect");
     }
    this.get = function () {}
    this.getAll = function () {}
};

var inst = new inst = new db_users(),
   nbr_u;

inst.count("WHERE PROP='VALUE'", function(res){
   nbr_u = res;
});

PS : Bordel il fait chier le nouveau forum à faire de la merde avec les espaces !! Pas moyen de faire quelque chose de correct il retire et rajoute des espaces un peu partout !

Lien vers le commentaire
Partager sur d’autres sites

Derien.

Effectivement, je n'avais pas vu le new à la déclaration. :transpi:

Et sinon la j'ai fait une belle boulette

var inst = new inst = new db_users(), nbr_u;

Il fallait bien sûr lire

var inst = new db_users(), nbr_u;

Sinon je pense que le mieux c'est que tu passe un callback en cas de succès et en cas d'erreur.

Ou alors que tu remplace directement le callback que tu passe à la méthode query : mais dans ce cas tu ne peux pas forcément encapsuler ta logique de log, donc les deux se défendent.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...