R Shiny - 限制每秒按下操作按钮的次数

mkr*_*anj 0 throttling r timing shiny

我正在 Shiny 中进行一些复杂的计算,用户通过 ActionButton 启动。然而,我担心用户在短时间内多次向按钮发送垃圾邮件,这可能会带来大量不必要的计算。我尝试过使用debounce(),但它仍然记录所有按钮点击。这是一个代表:

library(shiny)

ui <- fluidPage(
  actionButton("start", "Press me")
)

server <- function(input, output, session) {
  new_number <- eventReactive(input$start, {
    print("Button press registered!")
    # sleep to imitate a long calculation
    Sys.sleep(1)
    runif(1, 1, 1000)
  }) %>% debounce(millis = 3000)
  
  observeEvent(new_number(),
               print(new_number()))
}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

尝试运行该应用程序并尽可能快地单击。

它显示该按钮被记录为被按下多次,每次都会停止该过程完整的时间。
输出值仅打印一次,而不是单击按钮的次数,我怀疑这可能有用。但我不知道如何注册,例如,每秒最多按下一个按钮。

Sté*_*ent 6

一种可能性是使用onclick按钮的属性在单击按钮时禁用该按钮,并在您想要的持续时间(在下面的示例中为 3 秒)后重新启用它。

library(shiny)

onclick <- paste(
  "var btn = this;",
  "btn.setAttribute('disabled', 'disabled');", 
  "setTimeout(function(){btn.removeAttribute('disabled');}, 3000);"
)

ui <- fluidPage(
  actionButton(
    "start", 
    "Press me",
    onclick = onclick
  )
)
Run Code Online (Sandbox Code Playgroud)