首页 > 解决方案 > 如何使用代码在 R Shiny 中触发 session$onSessionEnded?

问题描述

我确实在Shiny 应用程序的session$onSessionEnded()(例如 a DBI::dbDisconnect())中执行了一些代码,我想知道直接从 R 代码触发它的最佳实践(例如,当不满足条件时,您关闭应用程序但也想触发这段代码)。

stop()将停止 R 代码(但不是应用程序本身让“幽灵”应用程序),而stopApp()将关闭应用程序而不触发session$onSessionEnded()

例如,我应该创建一个我应该在stopApp()ing 之前调用的函数,还是有办法告诉应用程序触发session$onSessionEnded()?像一个session$endSession()

标签: rshiny

解决方案


您可以session$close() 从服务器函数中的任何位置调用以停止当前会话。

这是一个例子:

library(shiny)

ui <- fluidPage(
  actionButton("stopSession", "Stop session")
)

server <- function(input, output, session) {
  
  session$onSessionEnded(function(){
    cat(sprintf("Session %s was closed\n", session$token))
  })
  
  observeEvent(input$stopSession, {
    cat(sprintf("Closing session %s\n", session$token))
    session$close()
  })
}

shinyApp(
  ui,
  server,
  onStart = function() {
    cat("Doing application setup\n")
    onStop(function() {
      cat("Doing application cleanup\n")
    })
  }
)

推荐阅读