node.js loops promise q

node.js - Q Promise Nodejs cómo resolver en bucle



loops (2)

En lugar de un deferred.resolve() en una matriz que se resolverá inmediatamente, use Q.all que espera una serie de promesas:

theFunction() .then(function(data) { var result = []; for(var i=0; i < data.length; i++) (function(i){ result.push(secondFunc(data[i].item) .then(function(data2) { data[i].more = data2.item; return data[i]; })); })(i); // avoid the closure loop problem return Q.all(result) });

O mejor:

theFunction() .then(function(data) { return Q.all(data.map(function(item) return secondFunc(item) .then(function(data2) { item.more = data2.item; return item; }); }); });

Tengo un código escrito en nodejs que me confunde usando Q Promises

theFunction() .then(function(data) { var deferred = Q.defer() var result = []; for(i=0; i < data.length; i++) { secondFunc(data.item) .then(function(data2) { data.more = data2.item }); result.push(data); } deferred.resolve(result); deferred.promise(); });

Quiero datos en la segunda función dentro del bucle puede empujar en el resultado

entonces mi información anterior es así

[ { id: 1, item: 1, hero: 2 }, { id: 1, item: 1, hero: 2 } ]

y así como esto

[ { id: 1, item: 1, hero: 2, more: { list: 1 } }, { id: 1, item: 1, hero: 2, more: { list: 4 } } ]

He intentado de varias maneras comenzar ingresando el comando deferred.resolve (); declaración en el bucle y solo mostrando 1 datos tiene alguna solución?


Sé que esta es una publicación anterior, pero tengo el mismo problema y no encontré ninguna solución. Tal vez alguien aquí encuentre una buena solución muy rápido.

function CompareTeamspeakClients(forumUsers) { var promises = []; var tsClient = new TeamSpeakClient("127.0.0.1", 10011); tsClient.send("login", { client_login_name: "serveradmin", client_login_password: "M+h8YzUA" }, function(err, response){ if (err) deferred.reject(err); }); tsClient.send("use", { port: 9987 }, function(err, response){ if (err) deferred.reject(err); }); forumUsers.forEach(function(user, index){ var deferred = Q.defer(); tsClient.send("clientdbfind", ["uid"], { pattern: user.tsid }, function(err, response){ if (err) deferred.reject(err); if (response) { tsClient.send("clientdbinfo", { cldbid: response.cldbid }, function(err, response){ if (err) deferred.reject(err); forumUsers[index][''tsdbid''] = response.client_database_id; forumUsers[index][''tsnickname''] = response.client_nickname; forumUsers[index][''tslastconnected''] = response.client_lastconnected; deferred.resolve(forumUsers); }); } }); promises.push(deferred.promise); }); console.log(promises); return Q.all(promises); }