繁体   English   中英

我如何将我的 firebase 实时数据库 function 转换为 firestore function

[英]How can i convert my firebase realtime database function to firestore function

我有一个工作 firebase 实时数据库 function 我以前写过,但是当我将我的数据库从实时数据库更改为 firestore 它现在不工作时,我转换了一点但我有问题要弄清楚如何转换 (.then.. ..) 部分。 我想做的是当用户状态字段在其文档中发生变化时我希望 function 在 firestore 数据库中查询并查找其他状态字段也在等待的其他人的文档并随机选择其中一个,然后更改其文档值如下例

这里是原来的firebase实时数据库function的一部分,是

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

exports.sayi = functions.database.ref("/users/{uid}/status").onWrite((change, context) => {
        console.log("status degisti");
        var rastgele = Math.floor(Math.random() * 2);
        var status = change.after.val();
        var user = change.after.ref.parent.key;  
        if (status ==="waiting") {
            const events = admin.database().ref('users');
            const query =events.orderByChild('status').equalTo('waiting').limitToFirst(2);
            query.on("value",
             function(data) {
                var waitinggameusers = data.val();
                var keys = Object.keys(waitinggameusers);
                for (var i = 0; i < keys.length; i++) {            
                    var key = keys[i];
                    if(key!==user){
                        var updates = {};
                        updates["/users/"+user+"/rakip"] = key;
                        updates["/users/"+key+"/rakip"] = user;
                        updates["/users/"+user+"/rakipsallama"] = "";
                        updates["/users/"+key+"/rakipsallama"] = "";
                        updates["/users/"+user+"/status"] = "on";
                        updates["/users/"+key+"/status"] = "on";
                        updates["/users/"+user+"/turn"] = "off1";
                        updates["/users/"+key+"/turn"] = "off2";                    
                        admin.database().ref().update(updates);
                        return true;
                    }             
                }
            }, sorunlu);
        }
    });

我当前的 Firestore 版本:

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

exports.yenisayi3 = functions.firestore.document('users/{userId}').onUpdate((change, context) => {
    const newValue = change.after.data();
    const previousValue = change.before.data();
    const userdoc = context.params.userId;
    if (newValue.status ==previousValue.status) {
        console.log("status degismedi");
        return true;
    }else{
        console.log("status degisti");
        var status = newValue.status;
        if(status==="off"||status==="on"||status==="win"){
            return false;
        }
        if (status ==="waiting") {
            return db.collection('users').where('status', '==', 'waiting').get().then(
                result=>{
                    if (result.docs.length === 0) {
                        return false;
                    }else{
                        return result.doc[0].ref.update({
                        status: 'on',
                        });
                    }
            });
        }
    }
});

目前我正在

TypeError: Cannot read property '0' of undefined
    at db.collection.where.get.then.result (/srv/index.js:31:24)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7) 

我的数据库布局是这样的:

在此处输入图像描述

而不是return result.doc[0].ref.update()你可能想要return result.docs[0].ref.update() 你少了一个's'。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM