我正在尝试读取在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。我已经尝试了多次,但可能无法正常工作。你能帮我吗?
答案 0 :(得分:0)
print(varA)
在observeEvent
函数外部,因此它将打印varA
的初始值(即3)而不是更新后的值(4)。解决方案是在print(varA)
函数中将session$close()
放在observeEvent
下方。
这意味着您可以删除(现在为空)session$onSessionEnded(function() { })
函数。
答案 1 :(得分:0)
尝试一下:
varA <<-varA + 1
更改全局变量