如何定期从RESTAPI获取数据?

如何定期从RESTAPI获取数据?,r,api,shiny,reactive,R,Api,Shiny,Reactive,背景 我目前正在使用R Shinny构建一个“数据记录器”应用程序。我有一个REST-API,它返回一个随时间变化的值。我的目标是创建一个Shinny应用程序,用户可以在其中单击actionbutton开始定期(例如每60秒)写入从API获取的值当用户单击另一个actionbutton时,数据的记录也应该停止 问题 我的问题是编写一个函数,该函数在按下一个按钮时开始执行,之后定期执行,在按下另一个按钮时停止执行 以前的想法 我以前尝试过使用invalidateLater(),但无法实现我的愿望

背景

我目前正在使用R Shinny构建一个“数据记录器”应用程序。我有一个REST-API,它返回一个随时间变化的值。我的目标是创建一个Shinny应用程序,用户可以在其中单击actionbutton开始定期(例如每60秒)写入从API获取的值当用户单击另一个actionbutton时,数据的记录也应该停止

问题

我的问题是编写一个函数,该函数在按下一个按钮时开始执行,之后定期执行,在按下另一个按钮时停止执行

以前的想法

我以前尝试过使用invalidateLater(),但无法实现我的愿望

你们能帮我想出一个聪明的主意吗


提前感谢!

这应该说明它是如何工作的。
invalidateLater()
是正确的选择。启动/停止按钮改变了一个确定轮询是打开还是关闭的反应式表达式。这样,反应式
RestPoll
表达式在每次打开/关闭时都会收到通知,当然,只要
Running()==TRUE
,500毫秒后就会收到通知

library(shiny)

ui <- fluidPage(
  actionButton("btnStart", "Start"),
  actionButton("btnStop", "Stop"),
  textOutput("outTime")
)

server <- function(input, output, session) {
  Running <- reactiveVal(FALSE) 
  
  observeEvent(input$btnStart, {
    Running(TRUE)
  })

  observeEvent(input$btnStop, {
    Running(FALSE)
  })
  
  RestPoll <- reactive({
    if (Running()) # IS called every time `Running` changes
      invalidateLater(500, session)
    
    # Add any REST calls here, process the results
    
    return(Sys.time()) # deliver results
  })
  
  output$outTime <- renderText({
    req(RestPoll())
  })
}

shinyApp(ui, server)
库(闪亮)

ui注意:此数据日志标记不是您要查找的数据日志标记[waves hand]en.wikipedia.org/wiki/datalog