Я не уверен на 100%, понимаю ли я желаемое поведение.Если вы нажмете «сброс», если таймер снова запустится с 0, или «таймеры сработают», никогда не будут напечатаны.Потому что с reactiveTimer
или invalidateLater
ваш код будет повторяться каждые x миллисекунд.
Я придумал этот маленький пример.Если вы хотите, чтобы «таймер срабатывания» никогда не появлялся при нажатии «reset», вы должны включить часть loopit()
.Если вы просто хотите сбросить таймер, удалите строки с помощью loopit()
.
require('shiny')
if (interactive()) {
ui <- fluidPage(
actionButton("reset_button", "Reset")
)
start = Sys.time()
n=10000
server <- function(input, output) {
loopit <- reactiveVal(TRUE)
observe({
invalidateLater(n)
if (loopit()) {
print(paste("start: ", start))
if (Sys.time() > start+(n/1000)) {
print ("timer fires")
}
}
})
observeEvent(input$reset_button, {
start <<- Sys.time()
loopit(FALSE)
print("reset")
})
}
shinyApp(ui, server)
}