Node.js Мой запрос не блокируется - PullRequest
2 голосов
/ 26 февраля 2012

Я новичок в node.js и пытаюсь вызвать службу, проанализировать ее данные и вернуть как часть представления. Я не могу получить запрос на блокировку, пока ответ не будет завершен. Консоль всегда записывает «неправильно» перед «правым» (возвращая массив 1,2,3). Чего мне не хватает?

app.js

  var reading = require('./reading'); 

  app.get('/reading', function(req, res){
  res.render('reading/index.stache', 
    {
      locals : { ids : reading.list},
      partials : {
             list : '{{#ids}}{{.}}<br />{{/ids}}'
      }
  });
});

reading.js

var request,
    http = require('http'),
    host = 'google.com',
    path ='/';

var list = function(){

var connection = http.createClient(80, host),
    request = connection.request(path);

request.addListener('response', function(response){
    var data = '';
    response.addListener('data', function(chunk){ 
        data += chunk; 
    });
    response.addListener('end', function(){
        console.log('right')
        //var results = JSON.parse(data); 
        // i need results from json
        return [88234,883425,234588];
    });
});

request.end();
console.log('wrong');
return [1,2,3];
}

module.exports.list = list;

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Конечно, вы не можете получить запрос на блокировку, пока ответ не вернется.

Это потому, что существует задержка связи между отправкой запроса и получением ответа обратно.Было бы глупо ждать и ничего не делать, пока происходит задержка.

Использовать обратные вызовы и асинхронный поток управления.

var list = function(callback){

var connection = http.createClient(80, host),
    request = connection.request(path);

request.addListener('response', function(response){
    var data = '';
    response.addListener('data', function(chunk){ 
        data += chunk; 
    });
    response.addListener('end', function(){
        console.log('right')
        // USE A CALLBACK >:(
        callback([88234,883425,234588]);
    });
});

request.end();
}
0 голосов
/ 26 февраля 2012

Если вы не хотите ничего синхронизировать, взгляните на модуль синхронизации . Он основан на волокнах.

...