setTimeout()在其设置时间之前连续调用回调函数
setTimeout() continuously calling callback function before its set time
我正在尝试为我的项目中的注释编辑功能设置一个计时器,为此我使用了setTimeout()15分钟。这是我的代码(Backbone+Coffee脚本):
在我的主干视图中,我有
initialize : =>
@model.bind "change", @render
@render()
render : =>
@model.func1()
在模型中-
func1: ->
if @func2() < 900
console.log 'in func1'
@setEditTimeOut()
func2: ->
# this returns total time left (in seconds) for a comment to edit
setEditTimeOut: ->
console.log 'here in set time out'
setTimeout (=> @func3()), @func2()*1000
func3 : ->
console.log 'in func3'
@.trigger 'change'
问题是setTimeOut
在一段时间后重复调用func3()
,我试图放console.log来检查调用序列,但在一段间隔后我得到了这个:
in func3
in func1
here in set time out
我是不是错过了什么?。谢谢你抽出时间。
首先,您很可能会设置许多超时,因为在这15分钟的时间范围内,只要模型发生变化,就会调用setEditTimeOut
。在注册新的之前,您需要确保取消超时
setEditTimeOut: ->
console.log 'here in set time out'
clearTimeout(@timeoutHandle) if @timeoutHandle
@timeoutHandle = setTimeout (=> @func3), @func2()*1000
然后,(我认为,根据您的描述)您需要确保在超时处理程序期间没有注册更多的超时
func3 : ->
@inCallback = true
console.log 'in func3'
@.trigger 'change'
@inCallback = false
setEditTimeout: ->
return if @inCallback
# ...
最后一点。。。我注意到你的回调显示(=> @func3)
,这真的很奇怪(它根本不应该工作。这是打字错误吗?它至少应该读(=> @func3())
)。相反,我认为您需要setTimeout @func3, @func2()*1000
,然后在定义func3
时,使用胖箭头:func3: =>
相关文章:
- setTimeout()在其设置时间之前连续调用回调函数
- 为什么你不能通过连续调用 .text() JQuery 来逃避
- 连续的 ajax 调用会冻结 chrome 和 IE
- 每次提交时,Ajax 表单开始和成功处理程序的调用次数会连续增加
- Javascript For Loop - 播放列表中的连续 Ajax 调用
- 连续调用 javascript 函数,直到条件
- 连续调用多个函数
- 显示快速连续 AJAX 调用的结果
- 在jQuery UI中,如何防止连续调用时运行数百万次的“脉动”效应
- 如何在按下按钮并打洞时连续调用函数
- 一个HTML按钮可连续调用3个函数
- 将连续调用的函数中的值保存到数组中
- JavaScript:连续调用对象上的函数列表
- Onclick被连续调用
- setTimeout()函数被连续调用两次
- 为什么“pattern.test(name)”连续调用的结果是相反的?
- 我将两个连续的消息推入消息队列,但它们似乎没有被连续调用
- 对于具有全局选项的模式,连续调用RegExp测试失败
- 多次连续调用回调函数会导致回调地狱
- 区分对递归函数的初始调用和连续调用