Verificamos exhaustivamente cada tutorial en nuestra web con el objetivo de enseñarte en todo momento la información con la mayor veracidad y certera.
Solución:
Con la recursión, el código es bastante limpio. Espere a que regrese la respuesta http y luego dispare el próximo intento. Esto funcionará en todas las versiones de node.
var urls = ['http://stackoverflow.com/', 'http://security.stackexchange.com/', 'http://unix.stackexchange.com/'];
var processItems = function(x)
if( x < urls.length )
http.get(urls[x], function(res)
// add some code here to process the response
processItems(x+1);
);
;
processItems(0);
Una solución que use promesas también funcionaría bien y es más concisa. Por ejemplo, si tiene una versión de get que devuelve una promesa y Node v7.6+, podría escribir una función async/await como este ejemplo, que usa algunas características nuevas de JS.
const urls = ['http://stackoverflow.com/', 'http://security.stackexchange.com/', 'http://unix.stackexchange.com/'];
async function processItems(urls)
for(const url of urls)
const response = await promisifiedHttpGet(url);
// add some code here to process the response.
;
processItems(urls);
Nota: ambos ejemplos omiten el manejo de errores, pero probablemente debería tener eso en una aplicación de producción.
Para enlazar y encadenar sincrónicamente acciones asincrónicas, la solución más limpia es probablemente usar un biblioteca de promesas (Se están introduciendo promesas en ES6, este es el camino a seguir).
Usando Bluebird, esto podría ser
Var p = Promise.resolve();
forEach(sets, function(item, index, arr) {
p.then(new Promise(function(resolve, reject)
http.get(theUrl, function(res)
....
res.on('end', function()
...
resolve();
));
);
p.then(function()
// all tasks launched in the loop are finished
);
Descubrí que no estaba liberando mis conexiones mysql después de que terminé con cada llamada y esto ató las conexiones, lo que provocó que fallara y pareciera ser un problema con la sincronización.
Después de llamar explícitamente connection.release();
hizo que mi código funcionara al 100 % correctamente, incluso de forma asíncrona.
Gracias por aquellos que publicaron en esta pregunta.
Aquí puedes ver las reseñas y valoraciones de los usuarios
Puedes añadir valor a nuestro contenido informacional participando con tu veteranía en las interpretaciones.