首页 > 解决方案 > 在 R/Shiny 中获取、等待语法?

问题描述

在 R/Shiny 中,我们可以使用 library(promises) 和 library(future) 来异步处理事件。但我似乎无法找到一种方法将它与 library(httr) 结合起来做类似于fetch/await/async的事情,从而设置一个 promise,当 httr 请求成功时解决。是否可以在 R/Shiny 中设置一个在 httr 请求成功时解决的承诺?或者您只能执行以下操作,首先检查是否会出现 http 错误?

library(shiny)
library(promises)
library(future)
plan(multisession)

ui <- fluidPage(
            textOutput("success"),
            textOutput("fail")

)

server <- function(input, output, session) {

    output$success <- renderText({
        # 201 success command should return
        get_command_1 <- httr::GET("http://httpbin.org/status/201")
        print(http_error(get_command_1))
        if(http_error(get_command_1)) {
            future(get_command_1) %...>%
            httr::content("parsed")
        }
        else {
            paste0(get_command_1$url, " failed")
        }
    })

    output$fail <- renderText({
        # but not 500 error command
        get_command_2 <- httr::GET("http://httpbin.org/status/500")
        print(http_error(get_command_2))
        if(http_error(get_command_2)) {
            future(get_command_2) %...>%
                httr::content("parsed")
        }
        else {
            paste0(get_command_2$url, " failed")
        }
    })

}

shinyApp(ui = ui, server = server)

标签: rshinyr-future

解决方案


推荐阅读