Я только что наткнулся на этот вопрос и предложил другое решение:
def allSuccessful[A, M[X] <: TraversableOnce[X]](in: M[Future[A]])
(implicit cbf: CanBuildFrom[M[Future[A]], A, M[A]],
executor: ExecutionContext): Future[M[A]] = {
in.foldLeft(Future.successful(cbf(in))) {
(fr, fa) ⇒ (for (r ← fr; a ← fa) yield r += a) fallbackTo fr
} map (_.result())
}
Идея здесь заключается в том, что в пределах складки вы ожидаете завершения следующего элемента в списке (используя синтаксис понимания), и если следующий не удастся, вы просто откажитесь от того, что у вас уже есть.
Я немного изменил пример shiny
из http://shiny.rstudio.com/gallery/current-time.html , чтобы помочь отображать время в поле textInput
, как было запрошено:
library(shiny)
ui <- shiny::fluidPage(shiny::uiOutput("ui"))
server <- function(input, output, session) {
output$ui <- shiny::renderUI({
invalidateLater(1000, session)
shiny::textInput(
inputId = "time",
label = "Today's Time",
value = as.character(format(Sys.time(), "%H:%M", "EST"))
)
})
}
shiny::shinyApp(ui = ui, server = server)
С сайта R Shiny:
http://shiny.rstudio.com/gallery/current-time.html
options(digits.secs = 3) # Include milliseconds in time display
function(input, output, session) {
output$currentTime <- renderText({
# invalidateLater causes this output to automatically
# become invalidated when input$interval milliseconds
# have elapsed
invalidateLater(as.integer(input$interval), session)
format(Sys.time())
})
}