[英]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
。 如果您認為創建新頁面為您提供了一個全新的工作環境,那么您就錯了。 就像一個新標簽一樣。 它將使用與您創建的所有其他頁面相同的會話。
如果您經常執行此操作,則會導致內存泄漏,因為您沒有關閉以前打開的頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.