Все вызовы google.script.run
являются асинхронными, то есть требуется время, чтобы функция возвращала ответ с сервера сценариев приложений. Между тем, код, требующий массив дат, является синхронным и выполняется до обновления даты. Поэтому код, требующий массив дат, должен, вероятно, находиться внутри вашего обработчика onSuccess
.
Если вы действительно хотите получить фантазию, вы можете даже использовать обещания, чтобы сделать ваш код асинхронным и последовательным для чтения одновременно.
Мне удалось заставить мою загрузку работать, используя пример функции обработчика загрузки, размещенной на LeafletMaps здесь: Почему webshot не работает с листовками в R блестящий? как показано ниже: Решение, приведенное по ссылке, похоже, объединяет решения, которые я пытался реализовать в своем первоначальном посте. Единственная проблема заключается в том, что он не работает, когда приложение развернуто на глянцевом.io library(shiny)
library(htmlwidgets)
library(webshot)
library(wordcloud2)
#webshot::install_phantomjs()
ui <- shinyUI(fluidPage(mainPanel(
wordcloud2Output("wordcl"),
downloadButton(outputId = "savecloud")
)))
server <- shinyServer(function(input, output, session) {
wordcl <- reactive ({
wordcloud2(demoFreq, color = "random-light", backgroundColor = "grey")
})
output$wordcl <- renderWordcloud2({
wordcl()
})
output$savecloud <- downloadHandler(
filename = paste("wordcloud", '.png', sep=''),
content = function(file) {
owd <- setwd(tempdir())
on.exit(setwd(owd))
saveWidget(wordcl(), "temp.html", selfcontained = FALSE)
webshot("temp.html", delay =15, file = file, cliprect = "viewport")
})
})
shinyApp(ui = ui, server = server)