1
擁有一個用戶可以對其他用戶圖片進行評分的應用程序,我希望計算出用戶收到的總投票數。我發現用Firebase實現這一目標的最佳方式是控制'onWrite'事件並在收到投票時爲每個用戶手動更新計數器。Firebase雲端功能 - 使用onWrite事件更新值
我用下面的代碼發現的問題是'votesCount'沒有在第一個'onWrite'事件上更新,但是它在下一個'onWrite'事件中更新,並且以前用戶的速度。這是爲什麼發生?這是一個投票應用程序的好方法嗎?
以下方法的目的是檢查投票用戶是否有'votes_count',如果爲true,則將新值添加到舊值,在相反的情況下只需添加新值。
exports.updateVotesCount = functions.database.ref('/votes/{id}').onWrite(event => {
const data = event.data.val();
var votesCount = admin.database().ref('/profiles/' + data.to).child('votes_count');
votesCount.once('value').then(function(snapshot) {
if (snapshot.val()) {
votesCount.set(snapshot.val() + data.rate);
} else {
votesCount.set(data.rate);
}
});
});
這是我使用的數據結構方面:
{
profiles: [
userId: {
name: "...",
image: "...",
votes_count: "..."
},
...
],
votes: [
voteId: {
from: "userId",
to: "userId",
rate: n
},
...
]
非常感謝,這似乎是一大步,現在我可以使用事務正確更新它,唯一的一點是該函數正在打印「錯誤序列化返回值:TypeError:將圓形結構轉換爲JSON」安慰。我不知道爲什麼自「票」應始終是一個浮動值。 –
@AlejandroMoránO男孩,如果你能解決這個錯誤,你是我的英雄。我在Github上提問:https://github.com/firebase/functions-samples/issues/193,並且有一種解決方法......我認爲這是Firebase中的一個錯誤,應該儘快解決。 –
是的,它似乎是根據這個答案的Firebase錯誤:https://github.com/firebase/functions-samples/issues/193#issuecomment-317884437返回值是一個TransactionResult並且不能被序列化,這是一個解決方法。 –