CasperJs异步方法wait,exit

概念:
所有的Phantomjs代码执行都是基于一个step栈,在执行脚本的时候,会将所有的step压入栈
例子:

phantom.outputEncoding = "GBK"
var casper = require('casper').create();
casper.start(function()
{
    this.echo("入口");
})
casper.wait(1000,function()
{
    this.echo("数字1");//do 1
})
casper.echo("数字2");//do 2
casper.run();
输出结果:
数字2
数字1

由于wait()方法是异步的,所以do2会先执行,do1等1秒后运行,如果想让do1和do2按顺序执行,必须修改方式为用than函数
 

casper.then(function()
{
    this.echo("数字2");
});

完整代码:

phantom.outputEncoding = "GBK"
var casper = require('casper').create();
casper.start(function()
{
    this.echo("入口");
})
casper.wait(1000,function()
{
    this.echo("数字1");
})
casper.then(function()
{
    this.echo("数字2");
});
casper.run();
输出结果:
数字1
数字2    

wait方法会先被压入栈,然后then压入栈,than()方法将一个新的step压入栈,一个step是一个js函数
打印堆栈信息:
 

require('utils').dump(casper.steps.map(function(step) {
    return step.toString();
}));

例子2:
 

phantom.outputEncoding = "GBK";
var casper = require('casper').create();
casper.start();//入口
casper.then(function step1()
{
    this.echo("this is step 1");
});
casper.then(function step2()
{
    this.echo("this is step 2");
})

casper.thenOpen("http://www.baidu.com",function step3()
{
    this.echo ("this is step  3 (baidu.com is loaded)");
})

casper.run()
//打印栈信息
require('utils').dump(casper.steps.map(function(step) {
    return step.toString();
}));

输出结果:

_step()函数是Phantomjs自动添加进去 ,用于加载baidu.com这个url,然后step3才能执行,栈中的step必须调用run后才会执行

例子3:

phantom.outputEncoding = "GBK";
var casper = require('casper').create();
casper.start();
casper.then(function() //第一层
{
    this.echo ("do1");
    casper.then(function() //第二层
    {
        this.echo("do2");
        casper.then(function()//第三层
        {
            this.echo("do3");
        })    
        this.echo ("do4");
    })
    this.echo ("do5");
})

require('utils').dump(casper.steps.map(function(step) {
    return step.toString();
}));

casper.run();

其实很简单,我也很爱你

运行顺序:

第一层,第二层,第三层

这个例子是我师父@梵心给我讲的,大概的意思我是懂了,让我不要这样写代码,不然就打死我 emmmmmmmmmm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值