我一直在尝试了解如何在 Shiny 中进行异步编程,但我无法让它工作。
在我看来,当我等待(十秒)情节出现时,日期应该每秒刷新一次。然而,事实并非如此。主要会议因
Sys.sleep()
而保持忙碌。
有人可以指出我对逻辑的理解出了问题吗?
(我按照手册制作了自己的代表。)
library(shiny)
library(future)
library(promises)
plan(multisession)
ui <- fluidPage(
shiny::selectInput("select", "select", choices = c("iris","mtcars")),
tableOutput("table")
)
server <- function(input,output,session) {
output$table<- renderTable(
{
select <- input$select
future_promise(
{
Sys.sleep(10)
get(select)
}
) %...>%
data.frame()
}
)
# check if session is not taken by expensive operation
observe(
{
invalidateLater(1000,session = session)
print(Sys.time())
}
)
}
shinyApp(ui,server)
以前,Shiny 中的异步仅用于不阻止其他用户。现在有
ExtendedTask
。优点是当前用户的会话不会被阻止。这是如何使用它的示例