如何使用云功能访问实时数据库的深度价值



childSnapshot.val().k中我有云功能:

{ '-LdmZIlKZh3O9cR8MOBU': 
   { id: 'ceccomcpmoepincin3ipwc',
     k: 'test',
     p: 'somepath',
     t: 1556700282278,
     u: 'username' },
 '-Llkocp3ojmrpemcpo3mc': 
   { id: '[epc[3pc[3m,',
     k: 'test2',
     p: 'somepath2',
     t: 1556700292290,
     u: 'username2' }
 }

我需要每个路径值,以便可以从存储中删除该文件。如何访问此值?

我的云功能用于刷新状态,从存储中删除和删除文件:

var db = admin.database();
var ref = db.ref('someref');
ref.once("value").then((snapshot) => {
var updates = {};
var patObject = {
    fid: null,
    ft: null,
    ftr: null,
    fu: null,
    id: null,
    lid: null,
    lt: null,
    ltr: null,
    lu: null,
    t: null,
    tr: null,
    v: null,
    g: null,
    l: null,
    k: null
    };
    snapshot.forEach((childSnapshot) => {
        if(childSnapshot.numChildren() >= 14){
                var t = childSnapshot.val().t;
            if((t===1 || t===5) && childSnapshot.val().tr > 0) {
                if(childSnapshot.val().tr - 12 > 0){
                    updates[childSnapshot.key + '/tr'] = childSnapshot.val().tr - 12;
            if(childSnapshot.val().k !== ""){
              console.log('path: ', childSnapshot.val().k);
              childSnapshot.val().k.snapshot.forEach(kpath => {
                console.log('path: ', "path");
              });
            }
                } else {
                    updates[childSnapshot.key] = patObject;
                }
            }
            if(childSnapshot.val().tr<=0){
                updates[childSnapshot.key] = patObject;
            }
        } else {
            updates[childSnapshot.key] = patObject;
        }
  });
    ref.update(updates);
    res.send("");   
    return "";
}).catch(reason => {
    res.send(reason);
})
return "";  

如果要删除与p s值相对应的所有文件,则需要使用Promise.all()并行执行异步删除任务(因为delete()方法返回Promise a Promise(。您需要迭代包含p路径的对象。

不容易理解您的代码,因此您会在下面找到与上述解释相对应的部分。您必须将其集成到您的代码中!

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const defaultStorage = admin.storage();  //Note this line
//.....
exports.date = functions.https.onRequest((req, res) => { //I understand that you use an HTTP Cloud Function
   //....
   .then(...
       // Somehow you get the object you mention in your question, through childSnapshot.val().k
        const kObject = childSnapshot.val().k;
        const bucket = defaultStorage.bucket(yourFileBucket);
        const promises = [];
        Object.keys(kObject).forEach(
          //The values of the path p are obtained via kObject[key].p
          //Based on that we push the Promise returned by delete() to the promises array
          promises.push(bucket.file(kObject[key].p).delete());        
        );
        return Promise.all(promises)   
    .then(results => {
        //Here all the Promises that were in the promises array are resolved, which means that all the files are deleted
        res.send({result: results.length + ' files(s) deleted'});
    })
    .catch(error => {
        res.status(500).send(error);
    });

});

观看Doug Stevenson的以下官方Firebase视频可能感兴趣:https://youtu.be/7ikugclr5oa

最新更新