Я использую сопрограммы Kotlin для получения данных с сервера, я передаю отложенные функции другим функциям.Если сервер не дает ответ в течение 2000 мс, я хотел бы получить объект из локальной БД комнаты (если он существует в локальной базе данных), но если я наконец получаю данные с сервера, я хотел бы сохранить их вв локальной БД для будущих звонков.Как я могу достичь этого?Я думал об использовании withTimeout, но в этой ситуации нет ожидания ответа от сервера после тайм-аута.
override fun getDocument(): Deferred<Document> {
return GlobalScope.async {
withTimeoutOrNull(timeOut) {
serverC.getDocument().await()
} ?: dbC.getDocument().await()
}
}
Идея, которую я придумал:
fun getDocuments(): Deferred<Array<Document>> {
return GlobalScope.async {
val s = serverC.getDocuments()
delay(2000)
if (!s.isCompleted) {
GlobalScope.launch {
dbC.addDocuments(s.await())
}
val fromDb = dbC.getDocuments().await()
if (fromDb != null) {
fromDb
} else {
s.await()
}
} else {
s.await()
}
}
}