在闪亮的

时间:2017-10-12 07:48:41

标签: r shiny

背景

在我的应用程序中,我想允许用户下载SQL数据库的快照。由于SQL连接可能存在一些错误,我想到了使用tryCatch构造。如果出现错误,我想向用户显示有意义的错误消息。为此,我创建了一个reactiveVal,其值在错误处理程序位中设置。我看到错误处理程序中的值已更改,但renderPrint函数未触发。知道我必须改变什么?

代码

library(shiny)

ui <- fluidPage(downloadButton("dat"), verbatimTextOutput("debug"))

server <- function(input, output) {
   errMsg <- reactiveVal()
   output$dat <- downloadHandler(filename = "test.xlsx",
                                 content = function(nF) {
                                    tryCatch({
                                       write.csv(mtcars, nF)
                                       stop("simulate SQL error")
                                    }, error = function(err) {
                                       print("Error Handler")
                                       errMsg("Error")
                                    })

                                 })
   output$debug <- renderPrint(errMsg())

}

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:1)

我不确定原因,但tryCatch似乎没有触发元素的失效。但是你可以手动完成。像这样更改语句似乎有效:

tryCatch({
  write.csv(mtcars, nF)
  stop("simulate SQL error")
}, error = function(err) {
  print("Error Handler")
  errMsg("Error")
},
finally = invalidateLater(1))