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

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

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 回答