downloadHandler уникально игнорирует текущий асинхронный процесс для того же пользователя

Я экспериментировал с обещаниями, и, как я понимаю, как указано в этом выпуске, асинхронный процесс, выполняющийся для того же пользователя, должен блокировать выполнение всех других внутрисессионных действий. Однако это не кажется универсальным принципом.

В приведенном ниже примере приложения у меня есть искусственно нарисованная операция построения и некоторые другие элементы, чтобы увидеть, как они взаимодействуют. Одним из этих элементов является downloadButton / downloadHandler пара. Пока выполняется асинхронная операция, все еще можно нажать downloadButton и получить вывод, который был неожиданным для меня. Мои вопросы:

  • Могу ли я прекратить загрузку downloadHandler во время выполнения асинхронного процесса?
  • Почему downloadHandler специальный?


library(future)
library(promises)
library(shiny)
plan(multisession)

server = function(input, output) { # slow async plot output$slow_plot <- renderPlot({ input$slow_plot_button future({ print('I am slow') Sys.sleep(10) runif(20) }) %...>% plot(.) }) # fast normal plot output$fast_plot = renderPlot({ print('I am fast') input$fast_plot_button plot(runif(20)) }) # something that has no UI output observeEvent(input$non_ui_update,{ print('Button press yay!') }) # trigger happy downloadHandler output$download = downloadHandler('file', content = function(file){ cat('is a file',file = file) })}

ui = fluidPage( titlePanel("Async test"), sidebarLayout( sidebarPanel( actionButton('slow_plot_button','slow plot button'), actionButton('fast_plot_button','fast plot button'), actionButton('non_ui_update','non ui update'), downloadButton('download','download') ), mainPanel( plotOutput("slow_plot"), plotOutput("fast_plot") ) ) )

shinyApp(ui,server)

Изменить: Удалена дополнительная информация о загрузке Кнопка загрузки всей страницы вначале, поскольку она не является неотъемлемой частью вопроса

0 ответов

Другие вопросы по тегам