Phantomjs CasperJS evaluate返回一个函数
如何获取Phantomjs CasperJS evaluate返回一个函数,phantomjs,casperjs,Phantomjs,Casperjs,如何获取求值以返回回调的返回 ary = @evaluate -> [1, 2, 3] @echo "LENGTH: #{ary.length}" @echo "TYPE: #{ary.constructor}" 产出: LENGTH: undefined TYPE: function LENGTH: 3 TYPE: Array 然后输出函数体,它是Casper的一部分 基于样本,比如我希望ary成为我的数组。我错过了什么 更新: 顺便说一下,这是有效的: ary = eval
求值以返回回调的返回
ary = @evaluate ->
[1, 2, 3]
@echo "LENGTH: #{ary.length}"
@echo "TYPE: #{ary.constructor}"
产出:
LENGTH: undefined
TYPE: function
LENGTH: 3
TYPE: Array
然后输出函数体,它是Casper的一部分
基于样本,比如我希望ary
成为我的数组。我错过了什么
更新:
顺便说一下,这是有效的:
ary = eval @evaluate ->
'[1, 2, 3]'
@echo "LENGTH: #{ary.length}"
@echo "TYPE: #{ary.constructor}"
产出:
LENGTH: undefined
TYPE: function
LENGTH: 3
TYPE: Array
是否必须将的输出作为字符串(或其他原语)进行封送处理?这不是样品所显示的
更新#2
我正在使用PhantomJS 1.9.1,这可能与此有关,因为我无法在降级到1.9.0后复制问题。我能够在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}"
在评估
完成执行之前打印
通过将这两个代码都包装到Casper.then中,您可以避免遇到这些异步问题。我能够在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}"
在评估
完成执行之前打印
通过将这两个问题都包装到Casper.then中,您可以避免遇到这些异步问题。我的示例可能太幼稚了。实际上,我在调用casper.then
,casper.thenOpen
,等等时遇到了这个问题。然而,我使用的是CasperJS 1.0.2,因此这似乎是更可能出现的问题。我现在修复一切的方法是使用PhantomJS 1.9.0。看起来CasperJS<1.1不应该与PhantomJS>=1.9兼容。我的例子可能太天真了。实际上,我在调用casper.then
,casper.thenOpen
,等等时遇到了这个问题。然而,我使用的是CasperJS 1.0.2,因此这似乎是更可能出现的问题。我现在修复一切的方法是使用PhantomJS 1.9.0。看起来CasperJS<1.1不应该与PhantomJS>=1.9兼容。