我的 PhantomJS 脚本有问题。该脚本从网页获取 JSON 编码的字符串,并用它执行其他操作。脚本:
var address = address;
var amount = 0;
function changeAmount()
{
var page=require('webpage').create();
page.open (address, function(){
//parse json, set amount to something (usually 4)
amount = 4;
});
}
changeAmount();
console.log(amount); //prints 0
//Do stuff with amount
phantom.exit(); //amount not changed yet.
如何在继续之前检查changeAmount函数是否完成?超时是不可能的,因为我不知道处理changeAmount 所需的时间。
最佳答案
page.open()
本质上是一个异步函数。唯一可靠的方法是在 PhantomJS 脚本中使用回调:
var address = address;
function changeAmount(callback)
{
var page = require('webpage').create();
page.open (address, function(){
//parse json, set amount to something (usually 4)
var amount = 4;
callback(amount);
});
}
您甚至可以将 amount
传递到该回调中以删除全局变量。
之后,您将需要使用该回调模式编写脚本。
changeAmount(function(amount){
console.log(amount);
//Do stuff with amount
phantom.exit();
});
<小时/>
此外,您可能不应该在每次调用 changeAmount()
时都创建一个新的页面
(如果您重复执行此操作)。您可以重复使用相同的页面
。如果您认为创建新页面可以为您提供一个全新的工作环境,那么您就错了。它就像一个新标签。它将使用与您创建的所有其他页面相同的 session 。
如果您经常这样做,这将导致内存泄漏,因为您没有关闭以前打开的页面。
关于javascript - PhantomJS javascript 等待函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30663169/