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);
});
});