downloadHandler однозначно игнорирует текущий асинхронный процесс для того же пользователя - PullRequest
0 голосов
/ 24 октября 2018

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

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

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

<code>
library(future)
library(promises)
library(shiny)
plan(multisession)</p>

<p>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)
                    })}</p>

<p>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")
        )
    )
)</p>

<p>shinyApp(ui,server)

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

...