公式 API ドキュメント http://docs.casperjs.org/en/latest/modules/casper.html#then
This method is the standard way to add a new navigation step to the stack, by providing a simple function:
then
は「ステップ」を表す。といわれてもなんのこっちゃ、という感じだが、要するに「前の処理が完了するまでちょっと待つ必要がある処理は新しい then
のコールバックの中で実行する」という約束なのだ、と考えればよい。
公式 FAQ FAQ — CasperJS 1.1.0-DEV documentation
「ちょっと待つ必要がある」いい例が思いつかなかったけど、例。 Web サイトを訪問してページタイトルを表示する。
casper = require('casper').create() casper.start() casper.open 'http://www.apache.org/' casper.echo "1 -> #{casper.getTitle()}" casper.open 'http://www.eclipse.org/', -> @echo "2 -> #{@getTitle()}" casper.open 'http://www.fsf.org/' # same to `casper.thenOpen 'http://www.fsf.org/'` casper.then -> @echo "3 -> #{@getTitle()}" casper.run()
https://github.com/kyanny/playground/blob/gh-pages/how-casperjs-then-works/main.coffee
実行結果。
$ casperjs main.coffee 1 -> 3 -> Front Page — Free Software Foundation — working together for free software
1 は open
が完了する前に echo
が実行されてしまい、まだページタイトルがとれないので 1 ->
だけ表示される。
2 は open
そもそもコールバック関数を受け取らないので空振りしている。
3 が正しい使い方で、 open
完了後に実行される次のステップとして then
が登録されるのでちゃんとページタイトルが表示される。 thenOpen()
は open().then()
のシンタックスシュガー。