我正在尝试获取一个应用程序,它会在一段时间后更新其输出(即使文本消失)。
在示例代码中,我希望在按下操作按钮时显示“正在等待”,然后延迟 5 秒,然后文本更改为“已完成”。
由于某种原因,整个observeEvent立即执行,所以结果是按下actionButton,然后有5秒的延迟,没有任何显示,然后显示“Finished”。
抱歉,我不知道如何更好地解释这个问题 - 但希望有人能提供帮助。如果可能的话,我想在这里只使用 R,而不深入研究 javascript。
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
textOutput("text"),
actionButton("press", label = "press")
)
server <- function(input, output) {
num <- reactiveVal()
observeEvent(input$press, {
output$text <- renderText("waiting")
num(1)
})
observe({
if(!is.null(num())){
output$text <- renderText({
Sys.sleep(5)
"finished"
})
}
})
}
shinyApp(ui = ui, server = server)```
Run Code Online (Sandbox Code Playgroud)
您可以使用shinyjs中的delay()函数
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
textOutput("text"),
actionButton("press", label = "press")
)
server <- function(input, output) {
num <- reactiveVal()
observeEvent(input$press, {
output$text <- renderText("waiting")
delay(5000,
output$text <- renderText("finished"))
})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)