CasperJS评估返回一个函数

时间:2013-08-30 21:36:21

标签: phantomjs casperjs

如何让evaluate返回回调回传?

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

输出:

LENGTH: undefined
TYPE: function

然后它输出函数的主体,这是Casper的一部分。

基于像this one这样的样本,我期待ary成为我的数组。我在这里缺少什么?

更新

顺便说一句,这有效:

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

输出:

LENGTH: 3
TYPE: Array

我是否必须将evaluate的输出编组为字符串(或其他基元)?这不是样本所显示的内容。

更新#2

我正在使用可能与它有关的PhantomJS 1.9.1,因为在降级到1.9.0后我无法复制问题。

1 个答案:

答案 0 :(得分: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中,您可以避免遇到这些异步问题。