如何从CasperJS中的“then”方法传递数据?

时间:2014-10-23 22:20:40

标签: javascript casperjs

使用CasperJS时,有多个then方法很常见。以下是一个例子:

casper.then(function(){
    var a = "test";
    // ...
})

casper.then(function(){
    // how to use the variable a in the first "then"
})

我的问题是,将值从前then传递到跟随then的常用方法是什么?对于上述示例,如何在第二个a中使用then

1 个答案:

答案 0 :(得分:9)

有很多方法,但最简单的方法是使用全局变量。如果您不想使用全局变量(与浏览器中的全局变量不同,因为您可能有不同的库)将脚本混乱,您可以使用IIFE来缩小范围。 / p>

casper.start(url);
(function(casper){
    var a;
    casper.then(function(){
        // set a
    }).then(function(){
        // use a
    });
})(casper);
casper.run();

全局版的另一个版本是将这些变量添加到casper对象。

可能最干净的解决方案是嵌套那些需要变量的块。您必须记住,在异步函数调用之后不能进行同步函数调用(这些调用都是wait*then*步骤函数)。在当前订书钉结束后执行预定步骤:

casper.start(url).then(function(){
    var a; // set a somehow
    this.then(function(){
        // use a
    });
}).then(function(){
    // don't use a
}).run();