按钮单击和超时在javascript

时间:2018-11-12 12:58:40

标签: javascript javascript-events timeout buttonclick

我正在从事离子项目,作为该项目的一部分,用户将必须完成定时任务。他们必须在15到几秒钟内回答选择题,否则他们将无法完成任务。

我当前在后台有一个超时,它将在后台调用函数“求值”,并禁用多项选择答案按钮。单击多项选择答案按钮之一也可以调用此功能。

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

3 个答案:

答案 0 :(得分:0)

您可以有一个名为“ eval_running”的变量,可以在评估函数中检入。如果为假,则将其设置为true并继续进行评估。如果为true,则不带评估就从函数返回。显示下一个任务时,将变量重置为false。

这将防止出现任何竞争状况。可能执行两次执行的时间范围取决于eval函数在后台运行多长时间。很有可能,您不必为此担心。

答案 1 :(得分:0)

在这种情况下最好的方法不是很复杂。因此,超时触发器和“提交”按钮都在调用相同的evaluate函数。

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

答案 2 :(得分:0)

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

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