//处理来自客户端的get请求
app.get('/watch', function(req, res) {
//A for loop goes here which makes multiple requests to an external API and stores the result in a variable data
console.log(data); //Gives an empty value!!
res.write(data); //Sends an empty value
}
现在,当我尝试在循环期间记录数据变量时,它的值是预期的。但是,它将数据作为空变量发送到客户端。我很确定这是因为for循环需要一段时间才能执行,而非阻塞的Node会移动到代码的下一部分。有没有针对此的解决方法,或者我的代码设计出现了根本性的错误?
编辑:按要求发布for循环
for(var num in data.items)
{
url ='/Product';
options={
host:"api.xyz.com",
path:url
};
http.get(options,function(response){
var responseData = "";
response.setEncoding('utf8');
//stream the data into the response
response.on('data', function (chunk) {
responseData+=chunk.toString();
});
//responseData=JSON.parse(responseData);
//write the data at the end
response.on('end', function(){
body=JSON.parse(responseData);
var discount=body.product[0].styles[0].percentOff.replace('%','');
if(discount>=20)
{
discounted_json.disc_items.push({"percentOff":discount});
}
});
});
}
答案 0 :(得分:0)
当你想按顺序调用多个异步函数时,你应该调用第一个,调用它的回调中的下一个,依此类推。代码看起来像:
asyncFunction1(args, function () {
asyncFunction2(args, function () {
asyncFunction3(args, function () {
// ...
})
})
});
使用这种方法,您最终可能会遇到难以维护的丑陋代码。
有多种方法可以在不嵌套回调的情况下实现相同的功能,例如使用async.js或node-fibers。