繁体   English   中英

按钮单击和超时在 javascript 中调用相同的函数

[英]Button Click and Timeout calling the same function in javascript

我正在做一个离子项目,作为这个项目的一部分,用户必须完成一个定时任务。 他们必须在 15~ 秒内回答一个多项选择题,否则他们将无法完成任务。

我目前在后台有一个超时,它会在后台调用函数“评估”,并禁用多项选择答案按钮。 此功能也可通过单击多项选择答案按钮之一来调用。

是否存在边缘情况的危险,即用户在超时调用评估函数时选择按钮,导致函数被调用两次? 我怎样才能避免这种情况?

您可以有一个名为“eval_running”的变量,您可以在评估函数中检查该变量。 如果为 false,则将其设置为 true 并继续评估。 如果为真,则无需求值就从函数返回。 当您显示下一个任务时,您将变量重置为 false。

这将防止任何类型的竞争条件。 可能发生双重执行的时间范围取决于 eval 函数在后台工作的时间。 很有可能,您无需担心这一点。

这种情况下的最佳方法不是很复杂。 所以超时触发器和提交按钮正在调用相同的evaluate函数。

你需要做的就是这个。 在函数打开时立即禁用提交按钮,然后写任何你想做的事情。 因此,如果超时先调用该函数,则该按钮将在执行操作之前被禁用,并且用户无法再单击该按钮。 如果首先单击按钮,那么它会按原样进行,这里没有任何复杂性。

据我所知,在 web 浏览器会话中没有办法有“竞争条件”,基本上是因为 web 浏览器中的每个选项卡都在单个线程中运行,所以您的逻辑将在单个 runloop 中运行。 您可以使用这个事实来实现一个标志,指示首先发生什么,但是(老实说)这非常难看。

我认为最优雅的解决方案应该是使函数evaluate幂等,这样,您就不必关心是否被多次调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM