Я разработчик Angular, мне нравится TypeScript. Когда я увидел облачную функцию в машинописном тексте, я был очень взволнован и решил попробовать. Я новичок в облачных функциях, поэтому я следил за документацией и официальным плейлистом YouTube по облачным функциям и некоторым другим. Я только что попытался создать облачную функцию, чтобы обновить поле updatedAt в хранилище данных в пути фактов / {docId}.
Каждый раз, когда что-то изменяется или обновляется в любом из документов, функция должна запускать и обновлять значение в поле updatedAt.
Написал такую ​​функцию

export const updateCreatedTime = functions.firestore
.document(`facts/{newFactId}`)
.onUpdate(async (snap,context) => {
await admin.firestore().doc(`facts/${context.params.newFactId}`)
.update({
time: snap.after.updateTime
})
});

Когда я обновляю данные, функция запускает и обновляет время, но затем запускает себя для обновления времени, обновляет время и так далее. Он продолжил бесконечный цикл, потребляя всю мою дневную квоту, я не знаю, что нам пришлось удалить функцию и повторно развернуть ее, чтобы остановить. Он продолжался до тех пор, пока не закончилась квота

Все, что нам нужно сделать, это просто сделать оператор if, чтобы определить, вовремя ли произошло изменение, и остановить его.

export const updateCreatedTime = functions.firestore.document(`facts/{newFactId}`)
.onUpdate(async (snap,context) => {
if(snap.before.data().time !== snap.after.data().time){
console.log(‘time Updated’);
}else{
await admin.firestore().doc(`facts/${context.params.newFactId}`).update({
time: snap.after.updateTime
}).then(()=>{
console.log(“Finish”);
}).catch(err =>{
console.error(err);
})
}
});

Вот ключ

snap.before.data().time !== snap.after.data().time

Если время до и после совпадает, это означает, что обновляется что-то, кроме времени, поэтому обновите время.

Надеюсь, это поможет таким новичкам, как я.
Это моя первая история на Medium.