[Nodejs] Passage de variable avec async

Passage de variable avec async [Nodejs] - Javascript/Node.js - Programmation

Marsh Posté le 13-04-2017 à 11:59:55    

Bonjour,
 
 
 
je bloque sur un probleme (je suis débutant Nodejs):
 
je bosse sur une app Nodejs + db Nosql mongodb qui se connecte à un webservice Json.
la structure des données reçues est la suivante:
             Pays
                |
           Agences
          /       |      
    Bien     Bien   Bien  
 
 
l'object pays contient des object agences( immobilières), et chaques object agences contiennent des biens immobiliers.
 
Mon problème est de récupérer l'ID (généré) de chaque object agence et de l'ajouter comme propriété à chaque biens de l'agence.
(Je dois donc normaliser ces données, avant de tout insérer en DB)
 
Javascript ne permet apparemment pas de le faire de façon simple (dans language plus "classique" ca ne poserait pas de probleme)
 
puisque l'ID devient undefined.
 
j'ai testé avec le module async en espérant qu'il resolve le probleme, mais il n'y a que waterfall qui puisse passer des variables/object entre les fonctions, or waterfall ne me semble pas adapté au traitement à effectuer.
 
 

Code :
  1. rest.get("https://monwebservice.com"
  2. .on("200",                function (data) {                    if (!data) {                        return callback();                    }
  3.                     // var data_from_ur = JSON.parse(data);                    //                    // console.log(data_from_ur);
  4.                     const agencies = data[1].agencies;
  5.                     async.each(agencies,
  6.                         function (agencyToFormat, callback) {
  7.                                                         let agencyFormatted = utils.ensureArray(agencyToFormat).map(function (serviceweboffice) {                                return converter.fromwebServiceOffice(serviceweboffice);                            })
  8.                             //l'ID généré à récupérer
  9.                             var agencyId= agencyFormatted.id;
  10.                             if(agencies.estates && agencies.estates.length>0)                            {                                let estateToFormat = agencies.estates;                                async.each(estatesToFormat,
  11.                                     function (estateToFormat, callback) {                                        let formatedEstate = utils.ensureArray(estateToFormat).map(function (servicewebEstate) {
  12.                                             return converter.fromwebServiceEstate(servicewebEstate);                                        });
  13.                                        
  14.                                         formatedEstate.officeId = agencyId;
  15.                                         console.log(formatedEstate.officeId); //null                                    }                                )
  16.                             }
  17.                            
  18.                         },
  19.                         function (err) {                            //                        }                    );                    // function convertAgencies(agencyToFormat, callback)                    // {                    //                    //                    //                    //     let agencyFormatted = utils.ensureArray(agencyToFormat).map(function(serviceweboffice)                    //     {                    //         return converter.fromwebServiceOffice(serviceweboffice);                    //     });                    //                    //                    //                    //                    //     callback(null, agencyFormatted);                    // }
  20.                     function getOfficeId(office, callback) {                        let new_officeid = Office.id;
  21.                         callback(null, new_officeid)                    }
  22.                 });


Apparemment la fonction bind pourrait être une solution, mais je ne vois pas trop comment l'utliliser
 
Merci pour votre aide
 
 
Tom


Message édité par tompouss le 13-04-2017 à 14:10:57

---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 13-04-2017 à 11:59:55   

Reply

Marsh Posté le 13-04-2017 à 13:31:19    

Bonjour,
 
Je te laisse éditer ton post avec la bonne balise avant de t'aider :)  
Le code est illisible.
 
Et je rajoute des questions:  
L'id généré des agences, tu le fais avec ca ?

Code :
  1. converter.fromwebServiceOffice(serviceweboffice);


 
Si oui, pourquoi ne pas enchainer une fois que tu as l'id généré avec une fonction qui parcours les biens d'une agence et lui associe l'id ? (Donc directement dans ton .map();)
 
Ton système me semble super compliqué pour pas grand chose ...
 
Tor


Message édité par torwood3 le 13-04-2017 à 13:37:58

---------------
"La valeur d'un homme tient dans sa capacité à donner et non dans sa capacité à recevoir." Albert Einstein / "Dans la nature, tout a toujours une raison. Si tu comprends cette raison, tu n'as plus besoin de l'expérience." Léonard De Vinci
Reply

Marsh Posté le 27-04-2017 à 12:51:32    

Bonjour,
 
j'ai résolu mon probleme en mettant ma variable dans un object(javais oublié qu'en javasript le passage de variable ne pouvait se faire qu'avec des object (me demande bien pq d'ailleurs)
 
 
par contre maintenant, je cherche à débugger mon app via la commande
 
 
 
node --debug test-mail_code.js
 
il me dit: debugger listening on [:]:5858
 
 
mais impossible d'atteindre cette adresse:
j'ai essayé plein de truc dont : http://[:]:8080/debug?port=5858
 
mais ca ne fontionne pas.
 
J'imagine que Chrome est capable d'uitliser une ipv6 comme URL ou faut-il utiliser une ipv4?


---------------
collectionneur de pâtes thermiques
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed