PhantomJS javascript 等到功能完成
PhantomJS javascript wait until function complete
我的 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 需要多长时间。
您可以使用回调,如下所示:
function changeAmount(callback) {
var page=require('webpage').create();
page.open (address, function () {
//parse json, set amount to something (usually 4)
amount = 4;
callback();
});
}
changeAmount(function () {
// This function runs when callback() (above) is reached
console.log(amount);
//Do stuff with amount
phantom.exit();
});
如果您没有在其他地方使用 amount
变量,您可以通过将其作为参数传递给回调来消除它:
changeAmount(function (amount) {
然后
callback(amount); // or callback(4);
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()
时都创建一个新的 page
(如果您重复这样做)。您可以重复使用相同的 page
。如果您认为创建新页面可以为您提供一个全新的工作环境,那您就错了。它就像一个新标签。它将使用与您创建的所有其他页面相同的会话。
如果您经常这样做,这将导致内存泄漏,因为您没有关闭之前打开的页面。
我的 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 需要多长时间。
您可以使用回调,如下所示:
function changeAmount(callback) {
var page=require('webpage').create();
page.open (address, function () {
//parse json, set amount to something (usually 4)
amount = 4;
callback();
});
}
changeAmount(function () {
// This function runs when callback() (above) is reached
console.log(amount);
//Do stuff with amount
phantom.exit();
});
如果您没有在其他地方使用 amount
变量,您可以通过将其作为参数传递给回调来消除它:
changeAmount(function (amount) {
然后
callback(amount); // or callback(4);
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()
时都创建一个新的 page
(如果您重复这样做)。您可以重复使用相同的 page
。如果您认为创建新页面可以为您提供一个全新的工作环境,那您就错了。它就像一个新标签。它将使用与您创建的所有其他页面相同的会话。
如果您经常这样做,这将导致内存泄漏,因为您没有关闭之前打开的页面。