我正在寻找一些功能,可以让我重复通过PhantomJs(使用类似jQuery的语法)抓取的div元素,但一个接一个 - 不是所有的像.each
似乎正在做的同一时间。所以我想我需要同步运行它。
目前我的代码看起来像这样
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
});
});
我需要一些不能同时启动所有each
次迭代的东西。也许有某种方式可以重复我可以使用的不会异步工作 - 这就是我需要的......
答案 0 :(得分:0)
如果launch
是异步的并且能够进行回调,那么
使用async:
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);
});
});
或使用类似waitFor的内容来等待通过launch
触发的外部条件。