0

evaluateコールバックのリターンを返すにはどうすればよいですか?

ary = @evaluate ->
  [1, 2, 3]
@echo "LENGTH: #{ary.length}"
@echo "TYPE: #{ary.constructor}"

出力:

LENGTH: undefined
TYPE: function

次に、Casper の一部である関数の本体を出力します。

このようなサンプルに基づいて、私はary私の配列になることを期待しています。ここで何が欠けていますか?

アップデート:

ちなみに、これは動作します:

ary = eval @evaluate ->
  '[1, 2, 3]'
@echo "LENGTH: #{ary.length}"
@echo "TYPE: #{ary.constructor}"

出力:

LENGTH: 3
TYPE: Array

evaluate出力を文字列 (または他のプリミティブ) としてマーシャリングする必要がありますか? それはサンプルが示すものではありません。

更新 #2

1.9.0 にダウングレードした後、問題を再現できないため、PhantomJS 1.9.1 を使用しています。

4

1 に答える 1

3

CasperJS 1.1-dev および PhantomJS 1.9.1 で次のコードを使用できます。

ary = []
casper.then ->
  ary = @evaluate ->
    [1, 2, 3]

casper.then ->
  @echo "LENGTH: #{ary.length}"
  @echo "TYPE: #{ary.constructor}"
  require('utils').dump(ary)

これにより、次の出力が生成されます。

LENGTH: 3
TYPE: function Array() {
    [native code]
}
[
    1,
    2,
    3
]

あなたが直面している問題は、おそらく

@echo "LENGTH: #{ary.length}"
@echo "TYPE: #{ary.constructor}"

evaluateの実行が完了する前に印刷されます。

これらの両方を でラップすることにより、Casper.thenこれらの非同期の問題が発生するのを回避できます。

于 2013-09-06T17:47:13.877 に答える