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

Jus*_*ner 7 javascript casperjs

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

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

casper.then(function(){
    // how to use the variable a in the first "then"
})
Run Code Online (Sandbox Code Playgroud)

我的问题是,将值从前thens 传递到后续thens 的常用方法是什么?对于前面提到的例子,如何a在第二个使用then

Art*_* B. 9

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

casper.start(url);
(function(casper){
    var a;
    casper.then(function(){
        // set a
    }).then(function(){
        // use a
    });
})(casper);
casper.run();
Run Code Online (Sandbox Code Playgroud)

全局的另一个版本是将这些变量添加到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();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢Artjom.你今晚回答了我的3个问题,我真的很感激! (2认同)