firebase函数datasnapshot无效

问题描述 投票:0回答:1

我试图在firebase函数中运行下一个代码,它给出了一个错误,即无法识别数据快照。什么可以导致它?

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();


exports.updateVotes = functions.database.ref('travels/{travelId}/locations/{locationId}/voting/users')
.onUpdate((userVotes, context) => {
    var travelId = context.params.travelId;
    var locationId = context.params.locationId
    var sumVotes = 0;

    userVotes.forEach((userVote) => {
        sumVotes += userVote.val().userVote;

    })
    // var votes = userVotes.val();
    // for (var vote in votes) {
    //     if (votes.hasOwnProperty(vote)) {
    //         sumVotes += votes[vote].userVote;
    //     }
    // }

    return admin.database()
        .ref('travels/' + travelId + '/locations/' + locationId + '/voting')
        .update({ votes: sumVotes })

})

错误是:

TypeError:userVotes.forEach不是exports.updateVotes.functions.database.ref.onUpdate中的函数

node.js firebase firebase-realtime-database google-cloud-firestore
1个回答
2
投票

onUpdate没有返回DataSnapshot它返回一个Change对象。

您需要选择afterbefore属性 - 在写入之前或写入之后是否需要信息(通常是在之后 - 这是Firebase中的新数据)。

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();


exports.updateVotes = functions.database.ref('travels/{travelId}/locations/{locationId}/voting/users')
.onUpdate((change, context) => {
    var travelId = context.params.travelId;
    var locationId = context.params.locationId
    var sumVotes = 0;

    var userVotes = change.after;

    userVotes.forEach((userVote) => {
        sumVotes += userVote.val().userVote;

    })

    return admin.database()
        .ref('travels/' + travelId + '/locations/' + locationId + '/voting')
        .update({ votes: sumVotes })

})
© www.soinside.com 2019 - 2024. All rights reserved.