JavaScript 如何在回掉函数中跳出 while 循环

ane · 2014年12月03日 · 最后由 wangbo 回复于 2014年12月03日 · 3696 次阅读

虽然是 js 代码,但是还是求助万能的 ruby-china.

需求是这样的:“抓取某个网站的数据,因为我不知道它具体分多少页,所以我只能在抓取的时候判断是否是最后一页”

while(flag){
    download(url, function(data) {
        if(data){
            var $ = cheerio.load(data);
            if($(".noresult").length==1){
                console.log('空');
                               flag=false;
            }
        }
    });
}

但是因为 node 的异步原因,这样是没法实现的,能有什么好的办法吗?

============================================================================================ 昨天一下午写不出来,今天早上居然 5 分钟内写出来了,思路是如此的清晰。拿出来,求拍砖,求改进。

var flag =true;
while(flag){
    page++;
    flag= (function(flag){ 
       return flag;
    })(download(url+page, function(data) {
        if(data){
            var $ = cheerio.load(data);
            if($(".noresult").length==1){
                console.log('空');
                return  false;
            }
                  //保存抓取的信息
             return true;
        }
    }));
}
var spider = function(url) {
    download(url, function(data) {
        //do your job here
        if(hasNextUrl){
            process.nextTick(function(){spider(newUrl)})
        }
    }); 
}
spider(startUrl)
需要 登录 后方可回复, 如果你还没有账号请 注册新账号