Comment faire une ProgressBar en NodeJs depuis une classe ?


#1

Bonjour à tous et à toutes,

J’espère que la communauté se porte bien :)

Aujourd’hui, je viens à vous car je rencontre actuellement une problématique que je n’arrive pas à résoudre …
A savoir que je suis nouveau sur NodeJS (toutefois je m’y connais déjà plutôt bien en PHP/Symfony, donc je ne pars pas de nul part)

J’ai une classe qui s’occupe de faire des traitements au travers d’une boucle (exemple simplifié) du nom de “MaClass”
La console voit tout le traitement grâce au “console.log” et à la variable “progress”, mais je n’arrive pas à récupérer ma variable en dehors de ma class de manière dynamique …

// Fichier MaClass.js
class MaClass {
  static async create(max, callback) {
    var progress = 0;
    var data = null;
    for (let i = 1; i <= max; i++) {
      progress = round((i/max)/100);
      console.log("Progression : " + progress + "%");
    }
    data = "Salut les human coders !";
    callback(data);
  }
}
module.exports = MaClass;

J’ai essayé avec les cookies (mais la fonction a besoin de la “response”, pour les sessions pas sur que ca soit adapté).
J’ai tenté de comprendre les events … bref je me perds complétement haha !
Je dois passer par mon “app.js” (qui fonctionne avec Express.js soit dit en passant) ?

Je dis peut-être de grosses bétises avec tout ce tralala, mais comment puis-je récuperer une variable d’une classe pour l’envoyer à ma vue (Twig) en temps réél (ainsi … je pourrai l’attribuer avec du jquery à une ProgressBar pour que ca soit joli) ?

Merci d’avance pour vos réponses les amis !


#2

Salut saurus1993, je pense que tu n’as pas la bonne approche pour ta problématique. Comme tu le dis, tu dois passer par la “response” pour envoyer le résultat au navigateur. Hors tant que ton traitement n’est pas terminé, tu ne peux rien envoyer.

Si tu veux envoyer l’information concernant l’état de ton traitement, perso j’utiliserai:

  • Soit un framework dit “temps réel” qui t’aidera à gérer tous les cas de figure et embarquera sûrement un système de fallback qui te permettra de passer partout. (le plus simple et le plus sûr)
  • Soit tu ouvres toi-même un socket ente le serveur et le nivigateur et tu implémentes le fonctionnement. (le plus long, mais formateur ;-) )
  • Soit tu estime le temps de traitement et tu le simule dans la progress bar côté front-end. (cas particulier)

J’espère que mon aide t’aura été utile :-).
@+