【发布时间】:2017-09-21 14:12:41
【问题描述】:
我正在设置一个全局变量,然后使用可以从模块的其他位置调用的函数在其中存储一个 setInterval。我还设置了一个函数来取消 setInterval,该函数可用于从模块内的其他函数中取消 setInterval。请看下面的sn-p:
var availabilityCheckInterval
function repeatAvailabilityCheckStart (session) {
availabilityCheckInterval = setInterval(() => {
// Call an API
if (successful) {
repeatAvailabilityCheckStop()
}
}, 15000)
}
function repeatAvailabilityCheckStop () {
clearInterval(availabilityCheckInterval)
}
这在我的本地机器和暂存环境上工作,但似乎在并发用户的生产中失败(或者它可能从未真正工作过......)。
我在这里遗漏了与变量范围相关的内容吗?我在有并发用户的生产环境中使用setInterval() 太天真了?
【问题讨论】:
-
为什么不让
repeatAvailabilityCheckStart将整数句柄返回给调用者,让他们取消呢?为什么不做任何事情的变量?您甚至可以,因为这些操作涉及间隔的 state,所以将它们包装在一个带有每个请求实例的类中。 20 美元表示您的生产失败来自那个“全局”(顶级变量在 Node.js 中实际上并不是全局的)。 -
变量的想法是将间隔存储在具有全局范围的变量中,以便可以在多个不同的地方取消它。我没有想过实际上将间隔句柄返回给调用者。当您说将它们包装在一个对象中时,请执行以下操作: var whatever = { startInterval: () => { setInterval(() => {}, 2000) } }?
标签: javascript node.js scope