Я столкнулся с тем, что операции, которые кажутся одинаковыми по функциональности, приводят к разным результатам.
В случае transaction.set(ref, data, {merge: true})
результат получается только при втором выполнении операции, а transaction.update(ref, data)
выполняется немедленно.
Все окружение и входные данные одинаковы в обоих случаях. Может быть, есть разница во времени выполнения?
async updateFields(userId: string, storyId: string, allItemsSeen: boolean,
lastId?: string | null): Promise<void> {
await this.db.runTransaction(async (transaction) => {
const queryRef = this.refs.story(userId, storyId);
const query = await transaction.get(queryRef);
const data: any = {[ALL_ITEMS_SEEN]: allItemsSeen};
if (lastItemSeenId !== undefined) {
data[LAST_ITEM_SEEN_ID] = lastItemSeenId;
}
if (!query.empty) {
transaction.update(query.docs[0].ref, data); // is performed immediately.
==========================================
transaction.set(query.docs[0].ref, data, {merge: true}); // the result is obtained only from the second execution of the operation
}
});
}