Ich habe die Wolke Funktion wie so:Feuerbasis Cloud-Funktion Transaktion arbeitet sporadisch
exports.updateNewsCount = functions.database.ref('/channels/{channelId}/news/{newsId}/')
.onWrite (event => {
const channelId = event.params.channelId;
const newsId = event.params.newsId;
let CntRef = admin.database().ref('/channelDetails/' + channelId + '/newsCnt');
if (event.data.exists() && !event.data.previous.exists()){
return CntRef.transaction(function(current){
if (current){
console.log ('current is not null');
return (current || 0) + 1;
}
else {
console.log('current is null');
return current;
}
},function(error, b, d){
if (error)
console.log(error);
else
console.log ('error is null');
if (b)
console.log('boolean is true');
else
console.log('boolean is false');
if (d)
console.log('snapshot is ' + d);
else
console.log ('snapshot is null');
}).then(()=>{});
} else if (!event.data.exists() && event.data.previous.exists()){
return CntRef.transaction(function(current){
if (current)
return (current || 1) - 1;
else
return current;
}, function(error, b, d){if (error) console.log(error); if (d) console.log(d);}).then(()=>{});
}
});
Sie feuert konsequent, wie ich die Log-Einträge sehen können. Das newsCnt-Feld wird jedoch nicht wie erwartet aktualisiert. Manchmal wird es aktualisiert und manchmal nicht !!! Was mache ich hier falsch?
Haben Sie versucht, sich an den verschiedenen Punkten anzumelden, von denen Sie erwarten, dass die Transaktion ausgeführt wird, um zu sehen, was sie eigentlich macht? –
Ja. Ich habe console.log an mehreren Stellen hinzugefügt, und wenn es funktioniert, sind die Protokolle wie erwartet. Die Cloud-Funktion kehrt auch immer mit dem Status ok zurück. Also ich weiß, dass es keine Syntaxfehler gibt. –
Die Cloud-Funktion wird jedes Mal korrekt ausgelöst, wenn sie benötigt wird. Die Funktion kehrt gemäß dem Protokoll mit dem Status ok zurück. Wenn es funktioniert, (meine console.logs, die ich im obigen Code entfernt habe) sagen mir, dass die Transaktion zweimal probiert wurde, einmal wo aktuell null war und ein zweites Mal, wenn der aktuelle Wert nicht null war. Ich habe das Gefühl, dass es vielleicht noch andere Cloud-Funktionen gibt, die das verhindern oder ähnliches. –