casperjs无限循环超时未等待
casperjs infinite loop timeout not waiting
我使用casperjs,我试图获取使用websocket更改其值的网站的内容。为了实现这一点,我只想每隔10秒抓取整个网站,而不是为每个值添加一个事件侦听器。
我有以下代码:
casper.waitForResource("http://website.com",function() {
getPrices(casper);
});
在getPrices中,我可以废弃这些值,最后我有以下几行:
setTimeout(getPrices(casper),5000);
问题是我不知道casper为什么忽略超时。它只是不眠不休地叫它。另一方面,我不认为这是最好的解决方案,因为它是递归的,从长远来看,它最终会有一个内存堆栈。
我怎样才能做到这一点?
谢谢!
您将立即调用getPrices(casper)
,然后将返回值传递给setTimeout()
,因此它不会在调用函数之前等待计时器启动。
您对此的声明:
setTimeout(getPrices(casper),5000);
是这样的:
var temp = getPrices(casper);
setTimeout(temp, 5000);
正如您所看到的,它会立即调用函数,并将一些返回值传递给setTimeout()
,这不是您想要的。
要修复它,请更改为以下任一:
// pass anonymous stub function
setTimeout(function() {
getPrices(casper);
},5000);
// use .bind() to create temporary function with the casper parameter bound to it
setTimeout(getPrices.bind(null, casper), 5000);
从setTimeout()
重复调用函数实际上并不是递归的。堆栈在setTimeout()
激发之前完全展开,因此没有堆栈堆积。
相关文章:
- 单击按钮以等待单击按钮
- React组件等待所需道具进行渲染
- 等待按键超时
- 使用$resource时,量角器等待与页面同步超时
- JavaScript - 如何等待/设置超时/睡眠/延迟
- 等待 IE 9 上的异步脚本超时
- 函数立即执行,不等待设置超时
- 在 Node 中,创建具有“等待连接”超时的 http 连接的好方法是什么
- 量角器在忽略同步期间等待,浏览器隐式超时与浏览器.等待超时
- set超时不等待 JQuery Mobile 中的指定间隔
- 检查超时是否正在等待运行
- AngularJS$超时是't在计算值之前等待UI路由器完成渲染
- setTimeout delay不等待超时
- Node.js:服务器等待响应和超时
- selenium-webdriver和phantomJS中的等待超时错误
- js -睡眠,等待,超时,暂停,延迟
- Javascript超时循环不会等待
- 我在客户端和服务器端都实现了xdomain脚本,但在IE9中不断获得'超时等待iframe套接字'警告
- casperjs无限循环超时未等待
- 错误:在11001ms后,量角器与页面同步的等待超时.当用户browser.getCurrentUrl()时