2012-03-03 17 views
8

¿Hay una versión síncrona del método http.get en node.js?Node.js: ¿Hay una versión síncrona del método `http.get` en node.js?

Algo así como:

http.getSync({ 
    host: 'google.com', 
    port: 80, 
    path: '/' 
}, function(response){ 

}); 

console.log(response) 

A veces sería muy útil.

+0

síncrono de E/S a veces es útil, pero no es la intención del tiempo de ejecución orientado a eventos que es Node.js - ella ha hecho para la velocidad, no la comodidad! =) – maerics

Respuesta

-6

No, no lo hay. Honestamente, no veo el caso de uso.

Si amplía su caso de uso o un problema que intenta resolver, intentaré responder a eso.

+8

¿Qué tal esto para un caso de uso: hacer una solicitud http durante la inicialización del servidor para obtener datos de configuración antes de iniciar una aplicación. Claro, puede agregar lógica para tratar esto de forma asíncrona, pero es más fácil de implementar de forma síncrona. – VinnyD

+2

Tiene 5000 filas, necesita llamar a una solicitud http para cada fila: - /, id = 0; var x = function() {http.get ('http: // foo', function() {id ++; if (id <) rows.length) x();}); } X(); ..... o x.forEach (function() {http.get ('http: // foo', function() {end!});}); .... es muy limpio llamar a porCada y menos código. Es imposible que todo el software creado sea asíncico, es totalmente ignorante. Se desarrollaron en más de 14 idiomas diferentes y puedo decir que siempre hay momentos en los que necesita una función para sincronizar. –

+1

Esto no responde a la pregunta – vikramaditya234

2

Hay una biblioteca sync-request que es bastante fácil de usar. Internamente, genera un proceso secundario de forma sincrónica y usa then-request, por lo que las opciones son similares a esa biblioteca.

Como han indicado otros, me gustaría advertir sobre el uso de esto en su lógica de tiempo de ejecución. Sin embargo, puede ser muy útil para cargar la configuración.

Si está cargando la configuración, otra estrategia puede ser usar una secuencia de comandos separada para iniciar su proceso. Ejemplo:

var http = require("http"), 
    cp = require("child_process"); 

// Starting process 
if (process.argv.length < 3) { 
    return http.get("http://www.google.com/index.html", function(res) { 
     var config = { 
      statusCode : res.statusCode, 
      headers : res.headers 
     }; 

     cp.fork(module.filename, [JSON.stringify(config)]); 
    }); 
} 

// Config provided 
var config = JSON.parse(process.argv[2]); 

console.log(config.statusCode);