我正在用CoffeeScript编写类似令牌桶的东西。
class TokenBucket
constructor: (@speed, @threshold) ->
@currentVolume = 0
@interval = setInterval =>
@currentVolume += 1
if @threshold < @currentVolume
@currentVolume = @threshold
, @speed * 1000
stop: ->
clearInterval @interval
return
get: ->
if @currentVolume == 0
false
else
@currentVolume -= 1
true
对于不熟悉CoffeeScript的人,让我简单解释一下。在构建
TokenBucket
之后,它会调用setInterval
并设置一个回调函数,每隔几秒钟就会增加“桶”的容量。问题是,如果用户在退出之前忘记调用
stop
,那么setInterval
将会保持Node.js进程运行,因为事件循环永远不会为空。我想做的是告诉Node.js这个setInterval
不重要,如果其他所有事情都完成了,你可以终止它。我该如何实现呢?
clearInterval
呢? - meskobalazssetInterval()
中执行回调并退出。 - Hot.PxL