我想要做的是访问page.open
之外的一些变量,但它似乎不起作用。
我们来看看这段代码:
var page = require('webpage').create();
var url = 'http://www.bing.com';
var Tester;
page.open(url, function(status) {
var cont = page.content;
var patt = /Bing/;
Tester = patt.test(cont);
console.log ("Inside " + Tester);
phantom.exit();
});
console.log ("Outside " + Tester);
输出结果为:
Outside undefined Inside true
我希望这两个值都是真的,并且顺序是在第一个和第二个之后。 发生了什么事?
外部代码似乎在内部代码之前执行。
答案 0 :(得分:0)
这是预期的行为,因为page.open
是异步的。这意味着只要调用page.open
,它就会打开指定的URL。这将花费一些时间,并且在加载页面并执行console.log ("Outside " + Tester);
回调之前执行下一个语句(page.open
)。
这是使用异步函数的正常JavaScript行为。如果你想在外面使用Tester
,你需要等待一段时间,直到加载页面并执行回调。
例如这样,静态超时为3秒,并希望在那段时间内加载页面:
page.open(...);
setTimeout(function(){
console.log ("Outside " + Tester);
}, 3000);
您可以增加超时时间以确保安全。
另一种可能性是使用waitFor
from the examples并明确等待Tester
设置:
page.open(...);
waitFor(function testFx(){
return Tester;
}, function onReady(){
console.log ("Outside " + Tester);
}, 10000); // something big, if it's ready earlier, then it is executed earlier