Запуск hello-world для записи нескольких последовательных значений true / false в базу данных firestore с целью синхронизации локальной переменной с облаком.
Похоже, что события обратного вызова не соответствуютпорядок, даже когда каждый вызов update()
ждет, прежде чем начать следующий вызов, используя get()
Я пишу «ложь», «истина», «истина», но ОТВЕТЫ «истина», «ложь',' true '
Даже странно, иногда есть 3 ответа, даже когда я только сделал 2 запроса.Могут ли вещи встать в очередь при следующем запуске приложения?Если это так, есть ли какой-нибудь способ быть уверенным в сбрасывании перед выключением?
Меня беспокоит, что мое локальное приложение может оставить неправильное представление о том, что является самым последним значением.
import com.google.auth.oauth2.GoogleCredentials
import com.google.cloud.firestore.FirestoreOptions
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
fun main() = runBlocking {
val firestoreOptions = FirestoreOptions.newBuilder()
.setCredentials(GoogleCredentials.fromStream(
ClassLoader.getSystemClassLoader().getResourceAsStream("serviceAccountKey.json")))
.setTimestampsInSnapshotsEnabled(true)
.build()
val db = firestoreOptions.service!!
val docRef = db.collection("users").document("tmpUser").collection("devices").document("tmpDevice")
docRef.addSnapshotListener { snapshot, _ ->
(snapshot?.data ?: mapOf()).forEach { key, value ->
println(" RESPONSE: '$key'='$value'")
}
}
println("Listening...")
val writeResultFuture2 = docRef.update(mapOf("running" to false))
println("REQUEST 'false' at ${writeResultFuture2.get().updateTime}")
val writeResultFuture3 = docRef.update(mapOf("running" to true))
println("REQUEST 'true' at ${writeResultFuture3.get().updateTime}")
val writeResultFuture4 = docRef.update(mapOf("running" to true))
println("REQUEST 'true' at ${writeResultFuture4.get().updateTime}")
delay(5_000)
println("Stopping.")
}
Вывод:
Listening...
RESPONSE: 'running'='true'
RESPONSE: 'running'='false'
REQUEST 'false' at 2018-10-12T21:07:25.530943000Z
REQUEST 'true' at 2018-10-12T21:07:25.686950000Z
RESPONSE: 'running'='true'
REQUEST 'true' at 2018-10-12T21:07:25.686950000Z
Stopping.