Aller au contenu
View in the app

A better way to browse. Learn more.

Next

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

Posté(e)

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:

Posté(e)

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 !

Posté(e)
  • Auteur

Cela marche merci !

PS : pas la peine de mettre cette ligne :

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

une instance de db_users est automatiquement cree au chargement de la classe.

encore merci ! :smack:

Posté(e)

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.

Posté(e)
  • Auteur

Salut !!

oui j'avais compris :yes:

pour l'instant j'essaye de maitriser le serveur comet .

j'essaye de faire un exemple concret avant de tout nettoyer

et mettre en place une architecture plus propre. :chinois:

Archivé

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.