CasperJS项目中方法的封装和调用问题,第二个遇到的workflow问题。
在其他代码中有几个方法,比如fun_A,fun_B,fun_C;
现在某个方法调用它们,有一个错误的示范:
casper.then(function(){ this.echo("xxxx"); this.wait(function(){ this.echo("AAAA"); }) this.waitForSelector(‘‘, function(){ fun_a.call(this); fun_b.call(this, str1, str2); fun_c.call(this); }, function(){ }, 100); this.wait(100,function(){ this.echo("BBBB"); }) })
这样调用,预期的workflow是:AAAA --> fun_a --> fun_b --> fun_c --> BBBB。
但是实际运行时,发现fun_a、fun_b、fun_c的执行顺序有些意外 ---我们可以认为这是CasperJS的一个bug!
为了避免这个问题,可以这样调用:
casper.then(function(){ this.echo("xxxx"); this.wait(function(){ this.echo("AAAA"); }) this.waitForSelector(‘‘, function(){ this.wait(100, fun_a.bind(this)); this.wait(100, fun_b.bind(this)); this.wait(100, fun_c.bind(this)); }, function(){ }, 100); this.wait(100,function(){ this.echo("BBBB"); }) })
当然如果fun_b需要带参数的话,如上一篇文所说,得考虑使用闭包实现方法fun_b。
(网络上很少casperjs的实践,很多东西自己摸索,写法也许不够专业,欢迎批评指正),不胜感激之至!
原文:http://www.cnblogs.com/andypeker/p/3971857.html