r - 如何在 Shiny 中使用 future_promise 异步写入数据库
问题描述
我正在尝试使用 DBI lib Shiny 将数据异步写入数据库(AWS postgres RDS)。到目前为止,这是成功的
data <- data.frame(id=threadr::uuid(), health_center_site_fact_id = "happy", total_patient=2)
write_user <- function(email, con) {
uuid <- threadr::uuid()
created_at = Sys.time()
conn = con
data.frame(id=uuid, health_center_site_fact_id = "happy", total_patient=2) %>%
dbWriteTable(conn = conn, name = 'patientv',
value = data,
# overwrite = F,
append = T,
row.names = F) %>%
print("database write successful :")
}
但是当我引入 future_promise 时,我得到了一个Unhandled promise error: Invalid connection
错误。
data <- data.frame(id=threadr::uuid(), health_center_site_fact_id = "happy", total_patient=2)
write_user <- function(email, con) {
uuid <- threadr::uuid()
created_at = Sys.time()
conn = con
future_promise({
data.frame(id=uuid, health_center_site_fact_id = "happy", total_patient=2) %>%
dbWriteTable(conn = conn, name = 'patientv',
value = data,
# overwrite = F,
append = T,
row.names = F) %>%
print("database write successful :")
})
}
解决方案
您不能将数据库连接从主进程复制到子进程,因为数据库连接只是指向内存中位置的指针,因此在子进程中,该指针几乎肯定会指向垃圾!您需要在子进程中重新创建数据库连接。