Блестящий: вывод на консольный вывод текстового объекта без ожидания завершения функции

Я новичок в Shiny и борюсь значительно.

Мне нужно дать своим пользователям Shiny возможность загружать файл данных (по сути, запрашивая базу данных). Запрос идет от одного раза к другому. Shiny поддерживает даты изначально, но не время, поэтому я должен дать пользователям текстовое поле сsubmitButton

Проблема в том, что мне нужно, чтобы кнопка отправки провела проверочный тест на обоих текстовых входах, а также: 1) вернула сообщение об ошибке, если какой-либо ввод недействителен; 2) загрузила данные, одновременно давая обновления статуса (данные могут занять час легко - я не хочу оставлять пользователей висящими).

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

Я думаю, что другим возможным решением было бы вернуться к renderText, а затем визуализировать текст прямо изqueryMagic функция - поскольку она проходит процесс загрузки данных, она может периодически обновлятьoutput$text с новым текстом. Но я не уверен, как именно это сделать.

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())
    })


  }
)

Заранее спасибо за помощь.

Ответы на вопрос(1)

Ваш ответ на вопрос