Я переписал ваши серверные коды, чтобы он работал.
Вы не можете обновлять пользовательский интерфейс в цикле, как я уже упоминал в комментарии, это не так, как работает Shiny.Используйте invalidateLater()
, чтобы сделать что-то похожее на цикл for.
А также, invalidateLater()
не работает в observeEvent
, поэтому вам нужно записать логику цикла в observe()
isolate()
используется для предотвращения рекурсивного запуска наблюдателя, поэтому он переоценивает только каждые 0,5 секунды на основе invalidateLater(500)
server = function(input, output, session){
vars = reactiveValues(cc="",ct=0)
startSearch <- reactiveVal(FALSE)
startSearch <- eventReactive(input$searchgt,{
TRUE
})
observe({
req(startSearch())
if (isolate(vars$ct) < 10){
invalidateLater(500)
isolate({
vars$ct=vars$ct+1
vars$cc=paste('<b style="color:blue">',"Searching...",vars$ct,"</b>")
vars$busca = try(print("Something"),silent = T)
})
} else {
vars$cc=paste('<b style="color:red">',"Some warning.","</b>")
}
})
output$warngt = renderUI({HTML(vars$cc)})
}