最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Firebase Cloud功能无法返回Promise并且永不停止呼叫

运维笔记admin10浏览0评论

Firebase Cloud功能无法返回Promise并且永不停止呼叫

Firebase Cloud功能无法返回Promise并且永不停止呼叫

我有这个代码

const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

const ref = admin.database().ref()


    exports.updateActiveUsers = functions.https.onRequest((req, res) => {
                console.log("updateActiveUsers Called")

                const currentTime = new Date().getTime()
                const startDate = currentTime - 432000000
                var allPromises = []
             return ref.child('users').orderByChild('lastOnline').once('value').then(snap =>{

                    snap.forEach(childSnap => {
                        console.log(childSnap.val().userID)
                        if (childSnap.val().lastOnline > startDate){
                            const ref2 = ref.child("activeUsers/" +  childSnap.val().userID).set(true)
                            allPromises.push(ref2)
                        }else{
                            const ref2 = ref.child("activeUsers/" +  childSnap.val().userID).remove()
                            allPromises.push(ref2)
                        }

                    })
                    console.log("promises: " + allPromises)
                    return Promise.all(allPromises)

                })
            })

我似乎无法让它返回或结束功能。我上传它提供的http网址,它工作,但页面继续加载,我查看日志,并在完成时继续调用该函数。很明显,承诺没有得到妥善回报,我不知道为什么!

回答如下:

您可以一次更新所有更改,而不是单独推送每个用户的更改。

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

admin.initializeApp(functions.config().firebase);

const usersRef = admin.database().ref('users');
const lastOnlineQuery = usersRef.orderByChild('lastOnline');

exports.updateActiveUsers = functions.https.onRequest((req, res) => {

  const currentTime = new Date().getTime();
  const startDate = currentTime - 432000000;

  let values = {};
  let activeCount = 0;

  return lastOnlineQuery.once('value').then(snapshot => {
    snapshot.forEach(child => {
      let { lastOnline, userID } = child.val();
      let value = lastOnline > startDate || null;
      values[`activeUsers/${userID}`] = value;
      activeCount += value;
    });
    return admin.database().ref().update(values);
  }).then(() => {
    res.send(`Active users: ${activeCount}`);
  }).catch(error => {
    res.status(500);
    res.send(error);
  });
});
发布评论

评论列表(0)

  1. 暂无评论