Изменить и прочитать глобальную переменную после сеанса в R Shiny - PullRequest
1 голос
/ 05 июля 2019

Я пытаюсь прочитать глобальную переменную, которая объявлена ​​перед пользовательским интерфейсом. В сценарии я изменяю глобальную переменную во время сеанса и в функции наблюдателя. Но когда я хочу напечатать эту измененную переменную после уничтожения сессии, она сама печатает старые значения. Я хочу сохранить эту измененную переменную (в моем требовании каждый раз, когда она меняется в каждом сеансе) для каждого сеанса.

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 в приведенном выше коде. Я пробовал несколько раз, но может быть, это не так. не могли бы вы помочь мне в этом.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Попробуйте:

varA <<-varA + 1

Чтобы изменить глобальную переменную

0 голосов
/ 05 июля 2019

print(varA) находится вне функции observeEvent, поэтому будет напечатано начальное значение varA (которое равно 3), а не обновленное значение (4). Решение состоит в том, чтобы поместить print(varA) чуть ниже session$close() в функцию observeEvent.

Это означает, что вы можете удалить (теперь пустую) функцию session$onSessionEnded(function() { }).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...