Javascript .每个都在Phantom.js和Cheerio中-有其他选择吗?

Javascript .每个都在Phantom.js和Cheerio中-有其他选择吗?,javascript,node.js,asynchronous,phantomjs,cheerio,Javascript,Node.js,Asynchronous,Phantomjs,Cheerio,我在寻找一个函数,它允许我通过PhantomJs使用类似jQuery的语法刮取的div元素进行重复,但是一个接一个地重复,而不是像这样同时重复。每个元素似乎都在重复。所以我想我需要它同步运行 目前,我的代码看起来像这样 page.open("https://www.google.com" + expandedurl, function (status) { console.log("opened google knowledge graph ", status); page.eval

我在寻找一个函数,它允许我通过PhantomJs使用类似jQuery的语法刮取的div元素进行重复,但是一个接一个地重复,而不是像这样同时重复。每个元素似乎都在重复。所以我想我需要它同步运行

目前,我的代码看起来像这样

 page.open("https://www.google.com" + expandedurl, function (status) {
 console.log("opened google knowledge graph ", status);
    page.evaluate(function () { return document.body.innerHTML; }, function (result) {
       var $ = cheerio.load(result);
       $(".kltat").each(function() {
         var link = $(this);
         var text = link.text();
         launch(text);
       });
       ph.exit();
       // Move on to the next one
  });
});
我需要一些不会同时启动所有迭代的东西。也许有一种方法可以重申我可以使用,但不能异步工作-这就是我需要的…

如果启动是异步的,并且能够进行回调,那么

用于此:

var async = require('async');

var $ = cheerio.load(result);
var callbacks = [];
$(".kltat").each(function() {
    var link = $(this);
    var text = link.text();
    callbacks.push(function(cb){
        launch(text, cb);
    });
});

async.series(callbacks, function(){
    ph.exit();
});
否则,您可以使用静态等待量:

callbacks.push(function(cb){
    launch(text);
    setTimeout(function(){
        cb(null);
    });
});
或者使用类似于等待通过启动触发的外部条件的方法。

您总是可以简单地使用for循环,但根据您的描述,问题似乎实际上在其他地方。您遇到了什么样的问题?Cheerio不会同时启动所有迭代。证明: