У меня такая ситуация с круговой функцией, возникают проблемы с поиском решения.
Есть коллекция, где у меня есть флаг, который сообщает, изменились ли данные. Также хочу внести изменения.
export async function landWrite(change, context) {
const newDocument = change.after.exists ? change.after.data() : null
const oldDocument = change.before.data()
const log = {
time: FieldValue.serverTimestamp(),
oldDocument: oldDocument,
newDocument: newDocument
}
const landid = change.after.id
const batch = db.batch()
const updated = newDocument && newDocument.updated === oldDocument.updated
if (!updated) {
const landRef = db.collection('land').doc(landid)
batch.update(landRef, {'updated': true })
}
const logRef = db.collection('land').doc(landid).collection('logs').doc()
batch.set(logRef, log)
return batch.commit()
.then(success => {
return true
})
.catch(error => {
return error
})
}
Проблема состоит в том, что это записывает журнал дважды, когда флаг UPDATED имеет значение false. Но также нельзя поместить запись журнала в инструкцию ELSE, поскольку флаг уже может быть ОБНОВЛЕН, и необходимо выполнить обновление нового документа, поэтому необходимо записать новый журнал.
Спусковой крючок:
import * as landFunctions from './lands/index'
export const landWrite = functions.firestore
.document('land/{land}')
.onWrite((change, context) => {
return landFunctions.landWrite(change, context)
})