当我们制作闪亮的应用程序时,我们知道:
1-如果您在server
部分中有一个函数,并且该函数返回错误,则浏览器将崩溃/关闭,并且用户不知道发生了什么。
2-如果您有一个函数会在另一个渲染函数内部返回错误,例如renderDataTable
,则该错误将在应用程序中显示,而不是显示表格。
了解了前两点后,我尝试将可能返回错误的函数放入渲染函数中。这样用户可以看到错误。
例如,如果我想显示一些来自数据库的表,并且有一个简单的查询,例如:
dbGetQuery(con,
statement = glue_sql("SELECT DISTINCT COLUMN1 FROM TABLE1", .con = con)
和COLUMN1
不存在,则该函数将引发错误。如果我在renderDataTable
中具有该功能,那么用户可以看到查询出了点问题。如果它位于server
内,则浏览器将关闭。
问题是,在某些情况下,我无法将查询放入renderDataTable
中。为了显示错误并避免浏览器崩溃,我们可以采取什么方法?
谢谢
答案 0 :(得分:1)
您可以使用showNotification
捕获错误,并使用library(shiny)
ui <- fluidPage(
titlePanel("Old Faithful Geyser Data"),
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
)
server <- function(input, output) {
###
#CATCHING THE ERROR IN A NOTIFICATION
###
tryCatch({
x1 <- DBI::dbGetQuery(con,
statement = glue_sql("SELECT DISTINCT COLUMN1 FROM TABLE1", .con = con))
},
warning = function(warn){
showNotification(paste0(warn), type = 'warning')
},
error = function(err){
showNotification(paste0(err), type = 'err')
})
output$distPlot <- renderPlot({
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
}
shinyApp(ui = ui, server = server)
进行显示。我已经通过“老忠实间歇泉”闪亮示例进行了说明,并在trycatch中添加了该示例,因此该应用程序不会崩溃:
this.confirmationDialogService.confirm(null, 'er du sikker på, at du vil gøre denne ændring', "Acceptere", "Afvise")