Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我想获得firebase数据的平均值_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Javascript 我想获得firebase数据的平均值

Javascript 我想获得firebase数据的平均值,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我想平均相关值​​当FireBase中的数据更新时 我正在使用Firebase函数,无法加载数据。 我可以在事件发生时更改所需的数据,但无法计算数据的平均值 exports.taverage = functions.database.ref('/User/tsetUser/monthQuit/{pushId}') .onCreate((snapshot, context) => { const promiseRoomUserList = admin.database

我想平均相关值​​当FireBase中的数据更新时

我正在使用Firebase函数,无法加载数据。 我可以在事件发生时更改所需的数据,但无法计算数据的平均值

exports.taverage = functions.database.ref('/User/tsetUser/monthQuit/{pushId}')
    .onCreate((snapshot, context) => {
        const promiseRoomUserList = admin.database().ref('/User/tsetUser/monthQuit/{pushId}').once('value');
        var sum=0;
        const arrayTime = [];
            snapshot.forEach(snapshot => {
               arrayTime.push('/User/tsetUser/monthQuit/{pushId}'.val());
            })
        for(let i=0; i<arrayTime.length; i++){
            sum+=arrayTime[i];
        }
        return admin.database().ref('/User/tsetUser/inform/standardQuit').set(sum);
    });
exports.taverage=functions.database.ref('/User/tsetUser/monthQuit/{pushId}'))
.onCreate((快照、上下文)=>{
const promiseroumserlist=admin.database().ref('/User/tsetUser/monthQuit/{pushId}')。once('value');
var总和=0;
常量数组时间=[];
snapshot.forEach(snapshot=>{
push('/User/tsetUser/monthQuit/{pushId}.val());
})

对于(设i=0;i我不确定为什么不能计算平均值,但更简单的代码版本是:

exports.taverage = functions.database.ref('/User/tsetUser/monthQuit/{pushId}')
.onCreate((snapshot, context) => {
    return admin.database().ref('/User/tsetUser/monthQuit/{pushId}').once('value')
    .then(function(snapshot) {
        let sum=0;
        snapshot.forEach(child => {
            sum = sum + child.val();
        })
        let avg = sum / snapshot.numChildren();

        return admin.database().ref('/User/tsetUser/inform/standardQuit').set(avg);
    });
});
最大的区别是:

  • 此代码从顶层和嵌套的
    then()
    返回承诺。这是必要的,这样云函数就可以知道您的代码何时完成,从而停止向您计费(并可能关闭容器)

  • 我们只需将每个子级的值添加到总和中,因为您没有以任何其他方式使用数组。请注意,
    child.val()
    取决于您没有共享的数据结构。因此,如果在那里失败,您需要更新获得确切值的方式(或与我们共享您的数据结构)

  • 代码实际上通过将总和除以子节点数来计算平均值


考虑使用移动平均值 <> P>一个要记住的是,每当一个节点被添加时,你都在读取所有的节点。这个操作会随着节点的增加而变得越来越昂贵。考虑如果你可以使用移动平均值,它不需要所有的子节点,而只需要当前的平均值和新的子节点。较新的值通常具有更大的权重,并且计算成本更低:

exports.taverage = functions.database.ref('/User/tsetUser/monthQuit/{pushId}')
.onCreate((snapshot, context) => {
  return admin.database().ref('/User/tsetUser/inform/standardQuit').transaction(function(avg) {
    if (!avg) avg = 0;
    return (15.0 * avg + snapshot.val()) / 16.0;
  });
});

错误:Reference.set失败:ValidateFileBaarg处的属性“User.tsetUser.inform.standardQuit”中的第一个参数包含NaN(/User\u code/node\u modules/firebase admin/node\u modules/@firebase/database/dist/index.node.cjs:1452:15)(/user_code/node_modules/firebase admin/node_modules/@firebase/database/dist/index.node.cjs.js:1430:5)在Reference.set(/user_code/node_modules/firebase-当我没有写总和时,我得到了一个没有发生的错误。