背景
在我的应用程序中,我想允许用户下载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)
答案 0 :(得分:1)
我不确定原因,但tryCatch
似乎没有触发元素的失效。但是你可以手动完成。像这样更改语句似乎有效:
tryCatch({
write.csv(mtcars, nF)
stop("simulate SQL error")
}, error = function(err) {
print("Error Handler")
errMsg("Error")
},
finally = invalidateLater(1))