在node.js中递归调用异步函数

时间:2017-05-24 18:46:59

标签: node.js asynchronous recursion

我是node.js.Learning异步库的新手,目前我有urls数组。对于每个网址,我必须向某个网站发出请求,我将从html页面获取其超链接。所以我们我必须使用Node.js的request.js模块递归调用。

var urls=["http://www.a.com","http://www.b.com"];

function getUrls(url,cb){

    request(url,function(error,response,body){

        if(response && response.statusCode==200)
        {


        }

        cb();
    });
}

function startProcess(urls){

    async.map(urls,getUrls,function(error,data){

    })

}
startProcess(urls);

在getUrls函数中,我每次为每个url调用请求函数。当我从响应中获取html页面数据时。我也从该页面抓取网址。我想打电话给"请求"这些网址的功能也是递归的。

没有async.map函数可以完成吗?

1 个答案:

答案 0 :(得分:0)

你不能。经过一些迭代后,您将获得堆栈溢出。你应该做些什么来解决这个任务,就是保持你要抓取的网址队列。然后在每个成功的响应中将新url添加到此队列中。像这样:

    #include <iostream>
   TCHAR* Converter(char* cha)    
   {
       int aa = strlen(cha);
       TCHAR* tmp = new TCHAR[aa+1];
       for(int i = 0; i< aa+1; i++)
          {
            tmp[i]=cha[i];
          }
       return tmp;
   }

   int main()
   {
       char* chstr= new char[100];
       chstr = "char string";
       TCHAR* Tstr = new TCHAR[100];
       //Below function "Converter" will do it
       Tstr = Converter(chstr);
       std::cout<<chstr<<std::endl;
       std::wcout<<Tstr<<std::endl;
   }