如何让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后我无法复制问题。
答案 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
中,您可以避免遇到这些异步问题。