在函数调用返回之前,使用node.js进行循环迭代,从而造成对象问题

Mallikarjun

我有节点代码可获取要爬网的网站列表,并在遍历结果时调用使用幻像编写的爬网函数。但是,在搜寻函数返回结果之前,循环会迭代次数,因此会迭代无法处理该爬行函数的调用次数。我需要立即回答我的问题。请有人把我从这件事中解脱出来。

我的主页代码

    db.fetch_serviceEntity(function(serviceEntityData){
      if(serviceEntityData!=""){
        serviceEntityData.forEach(function(item){
            console.log(item.website_url);
            db.fetch_entityId(item.id,function(entityId){
                crawler.getCount(item.website_url, item.name, function(rCount){
                    console.log("number of fresh reviews to crawl : ", parseInt(rCount) - parseInt(item.review_count));
                    if(rCount > item.review_count){
                        fetchReviews(item.website_url, entityId.id, parseInt(rCount) - parseInt(item.review_count), function(){
                            db.updateReviewCount(item.id, rCount, function(){
                                process.exit(0);    
                            });
                        });
                    }
                });
             });
          };    
        }); 
      }
      else {
        console.log("No websites to crawl/database error");
      }
      process.exit(0);
    });

我的抓取功能在这里

    crawler.prototype.crawl = function(webUrl, callback){
    console.log(webUrl);
    this.driver.create({ path: require('phantomjs').path }, function (err, browser) {
      return browser.createPage(function (err,page) {
        return page.open(webUrl, function (err,status) {
          console.log("opened site? ", status);
          page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', function (err) {
            // Wait for a bit for AJAX content to load on the page. Here, we are waiting 5 seconds.
            setTimeout(function () {
              return page.evaluate(function () {
                //Get what you want from the page using jQuery.
                var reviews = [];
                $('li div.review').each(function () { 
                  if($(this).find('div.ypassport').text()){
                    var d = new Date($(this).find('span.rating-qualifier').text().trim());
                    var temp = {
                        id : $(this).attr('data-review-id'), 
                        entity_id : "",
                        user_id : $(this).attr('data-signup-object').split(":")[1],
                    }
                    reviews.push(temp);
                  }
                });

                return {
                  reviews: reviews
                };
              }, function (err,result) {
                browser.exit();
                callback(result);
              });
            }, 5000);
          });
        });
      });
    });

};

我正在使用node-phantom-simple编写抓取功能

我的问题是->因为for循环使调用次数增加,爬网函数给我错误,指出某些或其他对象未创建。例如,在代码中它说“ createpage不是未定义的函数”,因此含义是未创建浏览器对象。有时它说“打开不是未定义的函数”,因此不会创建“页面”对象。

CFrei

您具有异步函数,但是如果您process.exit(0)从第一个函数返回时,所有数据库连接都将被丢弃,并且不会db.updateReviewCount调用任何函数。因此,您将或多或少地获得任意结果,具体取决于第一个关闭的结果。

(旁边的是,该代码是一个回调地狱。也许你想创建更小的功能,然后把它们连有像库async或者co甚至是手工制作。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Lambda函数中使用带有Node.js的https调用返回数据

来自分类Dev

关于node.js将数据返回给Ajax调用函数

来自分类Dev

Node.js函数在可以返回数据/实现回调之前返回null

来自分类Dev

Node JS问题,并承诺在完成之前返回

来自分类Dev

使用 Function 对象 node.js 调用函数

来自分类Dev

是否可以在Node.js中设置参数之前调用函数?

来自分类Dev

Node.js AJAX路由在评估引用的函数之前返回数据

来自分类Dev

socket.io 函数在回调完成之前返回 - Node.js

来自分类Dev

循环返回以进行迭代

来自分类Dev

在调用任何函数之前,调用函数的for循环会完成吗?

来自分类Dev

Node js使用从请求/请求api调用返回的数据

来自分类Dev

从循环调用的函数返回“继续”

来自分类Dev

从类函数调用返回对象

来自分类Dev

如何使用monk / node.js调用mongodb函数?

来自分类Dev

使用Node.js在不同的JavaScript文件中调用函数

来自分类Dev

异步函数在构建数据的对象之前返回

来自分类Dev

Node.js异步循环,下一个循环之前从函数进行回调

来自分类Dev

Node.js异步循环,下一个循环之前从函数进行回调

来自分类Dev

使用Node.js从异步函数返回列表

来自分类Dev

如何从函数返回数据并在Node.js中使用

来自分类Dev

在Node.js中使用异步瀑布进行函数迭代

来自分类Dev

C#GetExpirationDateString()以短日期格式返回数据,从而造成问题

来自分类Dev

在异步方法完成之前返回的函数JS

来自分类Dev

在vue.js中重新渲染之前的问题函数调用

来自分类Dev

Node.js:从内部带有异步调用的函数返回值

来自分类Dev

Node.js:从内部带有异步调用的函数返回值

来自分类Dev

Node.js-函数调用返回未定义并在以后评估

来自分类Dev

是否可以确保在下一次迭代之前调用循环内局部对象的析构函数?

来自分类Dev

使用for循环生成对象列表

Related 相关文章

  1. 1

    在Lambda函数中使用带有Node.js的https调用返回数据

  2. 2

    关于node.js将数据返回给Ajax调用函数

  3. 3

    Node.js函数在可以返回数据/实现回调之前返回null

  4. 4

    Node JS问题,并承诺在完成之前返回

  5. 5

    使用 Function 对象 node.js 调用函数

  6. 6

    是否可以在Node.js中设置参数之前调用函数?

  7. 7

    Node.js AJAX路由在评估引用的函数之前返回数据

  8. 8

    socket.io 函数在回调完成之前返回 - Node.js

  9. 9

    循环返回以进行迭代

  10. 10

    在调用任何函数之前,调用函数的for循环会完成吗?

  11. 11

    Node js使用从请求/请求api调用返回的数据

  12. 12

    从循环调用的函数返回“继续”

  13. 13

    从类函数调用返回对象

  14. 14

    如何使用monk / node.js调用mongodb函数?

  15. 15

    使用Node.js在不同的JavaScript文件中调用函数

  16. 16

    异步函数在构建数据的对象之前返回

  17. 17

    Node.js异步循环,下一个循环之前从函数进行回调

  18. 18

    Node.js异步循环,下一个循环之前从函数进行回调

  19. 19

    使用Node.js从异步函数返回列表

  20. 20

    如何从函数返回数据并在Node.js中使用

  21. 21

    在Node.js中使用异步瀑布进行函数迭代

  22. 22

    C#GetExpirationDateString()以短日期格式返回数据,从而造成问题

  23. 23

    在异步方法完成之前返回的函数JS

  24. 24

    在vue.js中重新渲染之前的问题函数调用

  25. 25

    Node.js:从内部带有异步调用的函数返回值

  26. 26

    Node.js:从内部带有异步调用的函数返回值

  27. 27

    Node.js-函数调用返回未定义并在以后评估

  28. 28

    是否可以确保在下一次迭代之前调用循环内局部对象的析构函数?

  29. 29

    使用for循环生成对象列表

热门标签

归档