在r Shiny中进行修改并读取全局变量



我正在尝试读取在UI之前声明的全局变量。在一种情况下,我正在修改会话期间的全局变量和观察者函数。但是,当我想在会话杀死后打印该修改的变量时,它会打印旧值本身。我想为每个会话保留此修改后的变量(每次会话上每次更改时的要求(。

library(shiny)    
timeoutSeconds <- 5
varA <- 3 #Declaring Global variable    
#Trigger the function after the 5 seconds 
inactivity <- sprintf("
function idleTimer() {
var t = setTimeout(logout, %s);
window.onmousemove = resetTimer; // catches mouse movements
window.onmousedown = resetTimer; // catches mouse movements
window.onclick = resetTimer;     // catches mouse clicks
window.onscroll = resetTimer;    // catches scrolling
window.onkeypress = resetTimer;  //catches keyboard actions
function logout() {
   Shiny.setInputValue('timeOut', '%ss')
  }
function resetTimer() {
   clearTimeout(t);
   t = setTimeout(logout, %s);  // time is in milliseconds (1000 is 1 second)
   }
}
idleTimer();", 
timeoutSeconds*1000, 
timeoutSeconds, 
timeoutSeconds*1000)
#UI 
ui <- fluidPage(
  tags$script(inactivity)  
)
#Server
server <- shinyServer(function(input,output,session){

  observeEvent(input$timeOut, {
    varA <-varA + 1 #Modifing this global variable for each session
    print(paste0("Session (", session$token, ") timed out at: ", Sys.time()))
    showModal(modalDialog(
      title = "Timeout",
      paste("Session timeout due to", input$timeOut, "inactivity -", Sys.time()),
      footer = NULL
    ))
    session$close()
  })
  session$onSessionEnded(function() {
    #Should print 4
    print(varA) #Printing the modified  variable  during sessions
  })
})
runApp(ui,server)

我想在上面的代码中打印4。我已经尝试过多次,但可能是不起作用的。您能帮我吗?

print(varA)observeEvent函数之外,因此它将打印varA(3(的初始值,而不是更新的值(4(。解决方案是将print(varA)放在observeEvent功能中的session$close()下方。

这意味着您可以删除(现在为空的(session$onSessionEnded(function() { })函数。

尝试以下:

varA <<-varA + 1

更改全局变量

最新更新