javascript - PhantomJS javascript 等待函数完成

标签 javascript asynchronous phantomjs wait

我的 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/

相关文章:

javascript - 动态按钮 ng-click 将变量传递给函数

javascript - Node.js 是否同时只执行一个上下文?

javascript - Node.js异步循环在下一个循环之前从函数回调

javascript - PhantomJS 和 XPath 选择器

jasmine - 我可以使用 phantom.js 来测试一个 javascript 繁重的应用程序吗?

javascript - .js 和 .css 的语法错误 - ASP.NET MVC 5

javascript - 需要在javascript中计算offsetRight

javascript - 同时等待 2 个(或更多)异步生成器

java - 在JAVA中发出多个http请求的快速异步方法

node.js - openshift 服务器中的 casperjs