setTimeout调用自身的任何问题
Any issue with setTimeout calling itself?
我读过一些setTimeout问题,但似乎没有一个与我脑海中的问题有关。我知道我可以使用setInterval(),但这不是我喜欢的选项。
我有一个网络应用程序,理论上可以运行一天或更长时间,而不需要刷新页面,每分钟检查一次以上如果我的函数使用setInterval调用自己几百次(或更多次),我可能会被绊倒吗?例如,我会达到"堆栈溢出"吗
如果我使用setInterval,那么两个请求同时运行的可能性很小,尤其是在慢速连接上(在第一个请求完成之前会引发第二个请求)。我知道我可以创建标志来测试请求是否已经处于活动状态,但我害怕误报。
我的解决方案是让一个函数调用我的jquery ajax代码,完成它的任务,然后作为ajaxComplete的一部分,它执行setInterval,在X秒内再次调用自己。这个方法还允许我更改调用之间的持续时间,因此如果我的服务器繁忙(缓慢),一个回复可以设置一个标志来增加ajax调用之间的时间。
我的想法的示例代码。。。
function ServiceOrderSync()
{
// 1. Sync stage changes from client with the server
// 2. Sync new orders from server to this client
$.ajax( { "data": dataurl,
"success": function(data)
{ // process my data },
"complete": function(data)
{
// Queue the next sync
setTimeout( ServiceOrderSync, 15000 );
});
}
您不会得到堆栈溢出,因为调用不是真正递归的(我称之为"伪递归")
JavaScript是一种事件驱动的语言,当您调用setTimeout
时,它只是在挂起事件列表中对一个事件进行排队,然后代码执行从您所在的位置继续,并且在从该列表中提取下一个事件之前,调用堆栈将完全展开。
p.s.如果您使用jQuery处理异步代码,我强烈建议您使用Promises。
相关文章:
- 客户端图像调整大小.任何已知问题
- setTimeout调用自身的任何问题
- 递归Javascript对象是否会导致任何问题(内存泄漏)
- 同步 Ajax 请求将导致页面上出现任何问题
- 通过抛出setTimeout()来处理JavaScript异常的任何问题
- 对jQuery使用setTimeout()是否有任何问题;媒体查询“;类型情况
- 页面速度 - 仅使用 defer 属性的任何问题
- 对函数表达式和我分配函数表达式的变量使用相同的标识符是否存在任何问题
- 直接从rails视图发送javascript的任何问题
- JavaScript表单提交不会发生任何问题
- 当模式位于单独的文件中时,创建模型时是否存在任何问题
- 转义HTML标记.字符集编码可能出现的任何问题
- NodeJS GZip压缩-任何问题
- 使用typeof窗口的任何问题.postMessage === undefined
- 将属性或函数附加到函数对象上是否有任何问题?
- 是否有任何问题使用JQuery/JavaScript应用大量的CSS样式
- 无限制地使用数组,不用担心任何问题
- 我的JavaScript是否有任何问题,应该通过Web API(在Azure上)返回JSON
- 将visibility=hidden设置为一个已经在javascript中隐藏的按钮,这会产生任何问题吗?
- 当我试图连接数据库时,是否有任何问题?