使用PhantomJS桥序列化函数
Serialize function with PhantomJS bridge
我有一个链接数组,这些链接使用链接parameter作为函数,该函数通过PhantomJS抓取数据。如何将此功能系列化?此for语句一次并行运行3个函数,并且我收到事件错误。
在这种情况下,使用async是合适的,但它如何在串行中使用?运行函数的时间总是不同的,但async应该如何理解它已经完成并从新的URL开始?
var phantom = require('phantom')
, async = require('async');
var urls = [
'http://en.wikipedia.org/wiki/Main_Page',
'http://es.wikipedia.org/wiki/Wikipedia:Portada',
'http://de.wikipedia.org/wiki/Wikipedia:Hauptseite'
];
async.mapSeries(urls, getTitle, function(err, result){
console.log(result);
})
function getTitle (link, callback) {
phantom.create(function(ph) {
return ph.createPage(function(page) {
return page.open(link, function(status) {
return page.evaluate((function() {
return document.title;
}), function(result) {
callback(null, result);
return ph.exit();
});
});
});
});
};
我会尝试这样的东西:
var links = []
var _ph
function init(cb) {
phantom.create(function(ph) {
//for each link in links call doStuff()
_ph = ph
doStuff(ph, link, cb)
})
}
function doStuff(ph, link, cb) {
ph.createPage(function(page) { //does things in parallel?
page.open(link, function(status) {
page.evaluate((function() {
document.title;
}), function(result) {
cb(null, result);
page.close();
});
});
}
var counter = links.length
var titles;
function results(err, res) {
titles.push(res)
if(--counter == 0) {
//done
_ph.exit()
}
}
init(results)
可能不工作代码(我在这里写的),但我希望你能明白这个想法。如果你只想使用一页,比如:
var links = []
var _ph
var _page
function init(cb) {
phantom.create(function(ph) {
_ph = ph
ph.createPage(function(page) {
_page = page
doStuff(link, cb)
}
})
}
function doStuff(page, link, cb) {
page.open(link, function(status) {
page.evaluate((function() {
document.title;
}), function(result) {
cb(null, result);
page.close();
});
});
}
var counter = links.length
var titles;
function results(err, res) {
titles.push(res)
if(--counter == 0) {
//done
_ph.exit()
return
}
doStuff(links[counter], results)
}
init(results)
相关文章:
- 修改序列化表单函数以获取输入ID而不是名称
- 类型错误:序列化表单时,未定义不是函数
- Javascript 中的函数可序列化性
- Angular $resource也序列化函数
- 如何从 .NET 字符串序列化 javascript 函数
- Javascript 对象序列化函数
- 如何在序列化和提交表单之前将值从一个函数传递到另一个函数
- 为什么我的序列化 JSON 在到达 java 脚本函数参数后被取消序列化
- node.js/sqlite-序列化回调以及主要函数
- 使用PhantomJS桥序列化函数
- 序列化表单并向函数发布ajax
- 将函数对象引用作为序列化json传递
- 用于php的Javascript数组序列化函数
- 解析javascript函数中用于序列化的外作用域引用
- 我正在使用jquery序列化函数通过ajax提交表单
- 如何在JavaScript中序列化函数
- 使用序列化函数发送表单的数据
- 序列化函数调用
- 使用c#在json中序列化一个函数作为参数
- jQuery序列化具有多个值的函数