node.js 用request包循环发请求

zhouxingxing 发布于 2013/06/06 18:13
阅读 682
收藏 0

新手求教个问题

我有一个需求,例如我有一个数组A,其中每个数组元素都是一个object, 其中有个属性是URL,我需要用Request向每个URL发请求,得到想要的数据,然后保存到相应的object,例如:

A.forEach(function(item){

 var 得到的数据 = request(item);

item.想要的数据 = 得到的数据

});

有人做过这样的么,node新手求教, 因为node是异步所以这样肯定不行的

加载中
0
yak
yak
var request = require('request');

var data=[
{url:"http://www.baidu.com",html:null},
{url:"http://www.sogou.com",html:null},
{url:"http://www.google.com.hk",html:null}
];

data.forEach(function(key){
    
console.log("crawling "+key.url+"....");
    request.get(key.url,function(err,res,body){
        if(!err){
        
            key.html=body;
           console.log("finisded "+key.url+" len:"+body.length); 
        }
    });
    
});
yak
yak
回复 @行陌路 : 我是说finished的,你用我的代码跑一下就知道
行陌路
行陌路
回复 @yak : i为lenth-1就是最好一个啊
yak
yak
回复 @zhouxingxing : 问题是你不知道哪个是最后的
zhouxingxing
zhouxingxing
回复 @zhouxingxing : 我就是这个问题 所以才有这个问题的, 如果我这样做 function(key, i, thisobject)用i和thisobject啦控制,到了最后一个请求返回之后,我在进行渲染 是不是就可以避免了?
yak
yak
回复 @zhouxingxing : 当然
下一页
0
MZM
MZM

你指的异步的 request 函数是异步的吗?一般异步函数都可以使用 callback 参数,这里假设 request 的第二个参数是一个 callback:

A.forEach(function (item) {
    request(item.url, function (得到的数据) {
        item.想要的数据 = 得到的数据;
    });
});

zhouxingxing
zhouxingxing
如果后面有页面的渲染,会不会有影响,会不会 提前渲染导致,没有数据,我是这方面的新手,帮下忙了
返回顶部
顶部