Problème d'asynchronicité avec Node.js et Async.js

Problème d'asynchronicité avec Node.js et Async.js - HTML/CSS - Programmation

Marsh Posté le 04-06-2012 à 18:34:10    

Salut,
J'essaie d'écrire une fonction permettant de charger toutes les associations dans une liste d'objets récupérés via Sequelize.js . Le problème est que les méthodes de Sequelize s'exécutent toutes en asynchrone. Du coup c'est assez difficile de les enchaîner dans un ordre précis.
 
Voilà comment je procède:
 
- Je récupère d'abord ma liste d'objets
- Ensuite je parcours chaque objet, je lance une requête pour chaque association et je stocke le résultat obtenu dans l'objet
 
Voilà un exemple de code:

Code :
  1. db.Bien.findAll({
  2.       where: {
  3.         ville: req.param('ville')
  4.       }
  5.     }).success(function(biens) {
  6.       helper.loadAssocs(biens, ['Proprietaire']).success(function() {
  7.       })
  8.     }
  9.     loadAssocs = function(objects, assocsToLoad) {
  10.       var func, func2, i, object, _i, _len;
  11.       if (!Array.isArray(objects)) {
  12.         objects = [objects];
  13.       }
  14.       if (!Array.isArray(assocsToLoad)) {
  15.         assocsToLoad = [assocsToLoad];
  16.       }
  17.       for (i = _i = 0, _len = objects.length; _i < _len; i = ++_i) {
  18.         object = objects[i];
  19.         object[i].assocsToLoad = assocsToLoad;
  20.       }
  21.       func2 = function(callback) {
  22.         var assocName;
  23.         console.log('plop!');
  24.         assocName = assocsToLoad.pop();
  25.         return eval('object.get' + assocName + '()').success(function(assocValue) {
  26.           object[assocName] = assocValue;
  27.           callback(null);
  28.         });
  29.       };
  30.       func = function(callback) {
  31.         console.log('yo!');
  32.         object = objects.pop();
  33.         async.forEach(object.assocsToLoad, func2);
  34.         return;
  35.         return chainer.add(emitter.run());
  36.       };
  37.       return new Sequelize.Utils.CustomEventEmitter(function(emitter) {
  38.         return async.forEach(objects, func, function() {
  39.           return emitter.emit('success', null);
  40.         });
  41.       }).run();
  42.     }


 
Ce code ne fonctionne évidemment pas mais il donne à peu près une idée de ce que j'essaie de faire (enfin j'espère)...


Message édité par real_mathos le 04-06-2012 à 18:36:59
Reply

Marsh Posté le 04-06-2012 à 18:34:10   

Reply

Sujets relatifs:

Leave a Replay

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