我正在编写一个闪亮的应用程序,需要在更长的计算过程中将数据发送到客户端。设置是这样的,在for循环期间,数据被添加到列表中,并且反应值被提升以表示新数据已到达。观察者依赖于无功值并设置为获取最后添加的数据并将其发送到客户端。伪设置就是这样的:
shinyServer(function(input, output) {
dataAdded <- reactiveValues(counter=0)
dataStore <- list()
dataGenerator <- observe({
if(input$analysisButton == 0) return(c())
files <- isolate({input$datafiles})
for(i in files) {
result <- doExpensiveAnalysis(i)
index <- length(dataStore)+1
dataStore[[index]] <<- result
dataAdded$counter <<- isolate(dataAdded$counter)+1
}
})
data <- reactive({
index <- dataAdded$counter
if(index != 0) {
do.call('renderData', dataStore[[length(dataStore)]])
}
})
output$result <- reactive({data()})
}
希望是在for循环的每次迭代之后,data()导体将被重新评估,因为它依赖于dataAdded $ counter。遗憾的是,重新评估只在整个循环完成后才会发生,导致只有最后一次迭代被发送到客户端。
我尝试将闪亮的::: flushReact()添加到循环中以使其无效...