首页 > 解决方案 > 如何使用 Javascript 云功能从 Firebase 实时数据库中随机获取子键名称

问题描述

我想从选择器部分随机获取一个子键,然后从另一个节点向它添加数据。我想用一个 JavaScript 云函数来完成这一切。这是我的代码。

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

exports.onDataAdded = functions.database.ref('/Pickup-Requests/{uid}').onCreate((snapshot, context) => {

    const getRandomPickerid =    
        database.ref('/Pickers').once('value').then(event => {
        const pickerUid =  Object.keys()[random];
        return pickerUid;
    })
    .catch(error => {
        console.error("Error", error);

    });

    const pickerUid = getRandomPickerid;

    const data = snapshot.val();
    const newData = data;
    return snapshot.ref.parent.child(pickerUid).set(newData);

});

图片

我怎样才能做到这一点?

标签: javascriptfirebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


以下应该可以解决问题:

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

function randomKey(obj) {
    var keys = Object.keys(obj);
    return keys[(keys.length * Math.random()) << 0];
}

exports.onDataAdded = functions.database.ref('/Pickup-Requests/{uid}').onCreate((snapshot, context) => {

    const db = admin.database();
    const data = snapshot.val();

    return db.ref('/Pickers').once('value')
    .then(snapshot => {
        const pickerUid = randomKey(snapshot.val()); 
        return snapshot.ref.parent.child(pickerUid).set(data);
    })

});

我建议您观看 Firebase 视频系列中有关“JavaScript Promises”的 3 个视频:https ://firebase.google.com/docs/functions/video-series/


推荐阅读