Hello
j'ai une fonction récursive. Elle doit exécuter une autre fonction plusieurs fois findPixel
, de manière asynchrone. J'utilise des promises pour savoir quand toutes les requêtes se sont exécutées, pour savoir quand relancer la fonction findRangee
.
Voici mon code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | function findRangee(a, na, callback) { console.log("rangee"); promesses = new Array(); for(b = 0; b < a; b++) { if(b >= w) b = w-1 c = a-b; if(c >= h) c = h-1 console.log("a: "+a+" b:"+b+" c:"+c); var ma_promesse = findPixel(b, c).then(function(retour){ console.log(util.inspect(retour)); }) promesses.push(ma_promesse); } Promise.all(promesses).then(function() { if(a < na) { console.log("new rangee"); findRangee(a+1, na, callback); }else{ callback(); } }); } function findPixel(x, y) { return new Promise(function (resolve, reject) { var objToFind = {}; if(y > 0) { objToFind['haut'] = data[y-1][x]; }else{ objToFind['haut'] = null; } if(x > 0) { objToFind['gauche'] = data[y][x-1]; }else{ objToFind['gauche'] = null; } //ici j'utilise find avec une limite de 1, mais c'est temporaire, sinon j'aurais utilisé findOne db.collection("pixels").find(objToFind).limit(1).toArray(function (error, results) { if (error) throw error; resolve(results); }); }); } |
Cependant, cela ne marche pas comme je voudrais:/
1 2 3 | var ma_promesse = findPixel(b, c).then(function(retour){ console.log(util.inspect(retour)); }) |
ce console.log ne s’exécute jamais.
1 2 3 4 5 6 7 8 9 | Promise.all(promesses).then(function() { if(a < na) { console.log("new rangee"); findRangee(a+1, na, callback); }else{ callback(); } }); |
Cependant, ce console.log s’exécute tout de suite
Une idée d'où cela peut venir ?
Merci d'avance
Au passage merci Viki53 et Thunderseb pour super tuto
+0
-0