簡體   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