Node.js我的请求没有阻止

时间:2012-02-26 08:18:33

标签: node.js request blocking

我是node.js的新手,我正在尝试调用服务,解析其数据并将其作为视图的一部分返回。在响应完成之前,我似乎无法阻止请求。控制台总是在'right'之前记录'错误'(返回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 个答案:

答案 0 :(得分:3)

当然,在回复之前,你无法阻止请求。

这是因为在发送请求和获取响应之间存在通信延迟。等待并且在发生延迟时不做任何事情是愚蠢的。

使用回调和异步控制流程。

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();
}

答案 1 :(得分:0)

如果您不想同步运行任何内容,请查看sync module。它基于纤维。