Brilhante: imprime a saída do console para um objeto de texto sem esperar a conclusão de uma função

Eu sou novo no Shiny e estou lutando consideravelmente.

Eu preciso dar aos meus usuários do Shiny a capacidade de baixar um arquivo de dados (essencialmente consultando um banco de dados). A consulta vai de uma vez para outra. O Shiny suporta datas de forma nativa, mas não há tempo, por isso tenho que fornecer aos usuários um campo de texto com umsubmitButton

O problema é que preciso que o botão enviar faça um teste de validação nas duas entradas de texto e: 1) Retorne uma mensagem de erro se uma entrada não for válida 2) Faça o download dos dados, enquanto atualiza o status (os dados podem demorar um pouco). hora com facilidade - não quero deixar os usuários em espera).

Eu descobri algo chamadorenderPrint essa parecia ser uma boa opção, pois pretende produzir o que foi impresso no console - então eu posso imprimir uma mensagem de erro ou exibir a saída normal do console a partir do processo de download de dados. Porém, ele retém a saída impressa até que todo o processo esteja concluído.

Estou pensando que outra solução possível seria voltar para renderText e renderizar texto diretamente doqueryMagic função - ao passar pelo processo de download de dados, ele pode atualizar periodicamenteoutput$text com novo texto. Mas não sei exatamente como fazer isso.

ui.R:

shinyUI(fluidPage(

  # Application title
  titlePanel("Demo Market Report"),

  fluidRow(

    column(4,
           h3("Extract Data"),
           helpText("Enter a start and end date/time of data to download. Be aware it takes about 10 minutes to download one hour of data.", strong("Date/time should be entered in yyyy-mm-dd hh:mm:ss format.")),
           textInput("fromDatetime", "From:", value = paste(with_tz(Sys.time(), "EST")-3600 )),
           textInput("toDatetime", "To:", value = paste(with_tz(Sys.time(), "EST"))),
           submitButton("Download Data Extract")
    ),
    column(4,
           textOutput("text1")
    )
  )


))

server.R:

shinyServer(
  function(input, output) {

    logText <- reactive({
      if (input$fromDatetime == "a") {
        data = queryMagic(blah,blah,blah) #this just gets the data, function is already used in production, I'll feed the shiny input into it but that seems straightforward
        return("victory")
      }
      else return("invalid")
    })

    output$text1 <- renderPrint({
      paste(logText())
    })


  }
)

Agradecemos antecipadamente a ajuda.

questionAnswers(1)

yourAnswerToTheQuestion