Моя пакетная запись возвращает странные результаты с компенсацией задержки для моих слушателей снимков. Пакет отлично выполняет запись в базу данных и не вызывает ошибок на клиенте, но прослушиватель снимка (в том же приложении), который прослушивает один из этих документов, возвращает странные результаты с задержкой. Пакет:
let db = Firestore.firestore()
let batch = db.batch()
let timestamp = FieldValue.serverTimestamp()
batch.updateData([
"private.index.\(someId)": ["count": 0, "timestamp": timestamp]
], forDocument: db.collection("someCollection").document(uId))
batch.deleteDocument(db.collection("anotherCollection").document("\(uId)-\(someId)"))
batch.commit { (error) in
if let error = error {
print(error)
}
}
Если прослушиватель моментальных снимков игнорирует возврат с hasPendingWrites
, данные в порядке, потому что они с сервера (что правильно). Но если слушатель снимка позволяет данные с компенсацией задержки, я получаю это:
["count": 0, "t": <null>]]
В то время как данные с сервера (и транзакций) выглядят так:
["count": 0, "t": <FIRTimestamp: seconds=1586033607 nanoseconds=198000000>]]
Нет причина, по которой метка времени должна быть равна нулю.
Что еще странно, если я выполняю ту же задачу в транзакции, проблем не возникает, даже с данными с задержкой (это правильно).
db.runTransaction({ (trans, errorPointer) -> Any? in
trans.updateData([
"private.index.\(someId)": ["count": 0, "timestamp": timestamp]
], forDocument: db.collection("someCollection").document(uId))
trans.deleteDocument(db.collection("anotherCollection").document("\(uId)-\(someId)"))
return nil
}) { (_, error) in
if let error = error {
print(error)
}
}
Ожидается ли, что пакетная запись иногда не даст согласованных результатов с задержкой, поскольку они не работают точно так же, как транзакции?