我是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;
答案 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。它基于纤维。