在我闪亮的应用程序中,我有一个应该不断更新自身的输出。但是每当我执行长时间运行的计算时,输出就会暂停。我的问题是:如何让输出持续不间断地运行?
请参阅下面的简短演示:
时钟每一秒刷新一次,但如果我单击运行 5 秒的按钮,时钟就会暂停。
library(shiny)
ui <- fluidPage(
actionButton("button","Expensive calcualtion(takes 5 seconds)"),
tags$p("Current Time:"),
textOutput("time"),
tags$p("Result from clicking button:"),
textOutput("result")
)
server <- function(input, output, session) {
output$time <- renderText({
invalidateLater(1000)
as.character(Sys.time())
})
observeEvent(input$button,{
Sys.sleep(5)
output$result <- renderText(runif(1))
})
}
shinyApp(ui, server)
我尝试使用future
and promises
使长时间运行的进程异步运行,但它不起作用。哪里错了?那么有没有更好的方法来实现这个目的呢?
library(shiny)
library(future)
library(promises)
plan("multisession")
ui <- fluidPage(
actionButton("button","Expensive calcualtion(takes 5 seconds)"),
tags$p("Current Time:"),
textOutput("time"),
tags$p("Result from clicking button:"),
textOutput("result")
)
server <- function(input, output, session) {
output$time <- renderText({
invalidateLater(1000)
as.character(Sys.time())
})
process <- eventReactive(input$button,{
future({
Sys.sleep(5)
runif(1)
})
})
output$result <- renderText(process())
}
shinyApp(ui, server)
任何帮助表示赞赏!