等待CasperJS模块完成执行后再返回值
Wait for CasperJS module to finish executing before returning a value?
我目前正在尝试制作一个使用Casper模块执行某些操作的Casper模块,并从中返回一个变量,有点像这样:
var data = [];
exports.parsePage = function(argUrl) {
url = baseUrl = argUrl;
if (!url) {
casper.warn('No url passed, aborting.').exit();
}
casper.start('https://js-uri.googlecode.com/svn/trunk/lib/URI.js', function() {
var scriptCode = this.getPageContent() + '; return URI;';
window.URI = new Function(scriptCode)();
if (typeof window.URI === "function") {
this.echo('URI.js loaded');
} else {
this.warn('Could not setup URI.js').exit();
}
//process is a function that processes the page
}).run(process);
return data;
}
我的测试是这样的:
var scanner = require('./pageParser');
console.log(JSON.stringify(scanner.parsePage('http://url.com')));
在parsePage函数中返回数据之前,是否可以等待casper完成执行?
您可以使用一个类似等待的函数,就像本例中从phantomjs中获得的一样,但您缺少javascript的一个基本概念:异步和回调。
因此,一个可能的解决方案是…
模块pageParser.js
:
function process(callback) {
//do something here
callback(data);
}
exports.parsePage = function(argUrl, callback) {
...
casper.start('https://js-uri.googlecode.com/svn/trunk/lib/URI.js', function() {
...
}).run(process(callback));
}
主脚本:
var scanner = require('./pageParser');
scanner.parsePage('http://url.com', function(data) {
console.log(JSON.stringify(data));
});
相关文章:
- Javascript返回值只在循环中返回一次
- XMLHttpRequest未返回值-状态202
- 对具有ui typeahead的对象中的值执行orderBy
- 根据是否解析了 Promise 从函数返回值
- Angular,函数在(模型)工厂中返回值
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 如何获取在HTML页面上执行的Javascript函数的返回值
- 返回 javascript 函数的真/假值,然后基于该值执行操作
- 一旦超时执行,清除或重新分配分配给 setTimeout 返回值的变量是否有任何技术点
- 如何对另一个函数的返回值执行一个函数
- 从Background.js在页面级别执行代码并返回值
- 等待CasperJS模块完成执行后再返回值
- 当内部函数异步执行某些操作时,如何从外部函数的回调返回值
- Sweetalert暂停执行并返回值
- 函数不执行/不返回值
- 在控制器方法返回值之前,首先执行提交按钮的单击事件
- 测试一个Node.js函数,该函数的返回值可以根据执行异步操作的时刻而改变
- 比较' prompt '的返回值和number的' if '语句永远不会执行
- JavaScript:执行函数顺序 - 在函数完成处理之前嵌套函数返回值
- 从量角器执行一个方法并获得返回值