Node.js我的请求没有被阻止

我是新来的node.js,我试图调用一个服务,parsing它的数据,并返回它作为一个视图的一部分。 我似乎无法得到阻止的请求,直到响应完成。 控制台总是在“正确”之前logging“错误”(返回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; 

当然,在响应回来之前,你无法得到阻止的请求。

这是因为发送请求和获得响应之间存在通信延迟。 在等待时间正在发生的时候,等待什么都不做就太愚蠢了。

使用callback和asynchronous控制stream。

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

如果你不想同步运行任何东西,看看同步模块 。 它基于纤维。