在 R Shiny 应用程序中延迟后更改输出

Art*_*urs 1 r shiny

我正在尝试获取一个应用程序,它会在一段时间后更新其输出(即使文本消失)。

在示例代码中,我希望在按下操作按钮时显示“正在等待”,然后延迟 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)

Orl*_*gal 7

您可以使用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)