我使用firebase函数和Admin SDK在事件触发器上实现函数。当有新的更新可用时,我正在尝试向用户推送通知。因此,当更新版本从当前版本更改时,我想对用户对象进行一些更改,并将update_available密钥设置为true
现在,正在跟踪的事件(update_version(的位置和要更改的数据位于完全不同的对象中。对象模型如下:
|root
|- app_info
|- version
|- users
|- <uid>
|- checker
|- update_available: true
到目前为止,我还没有做到这一点:
function setUpdateValueTrue() {
db.ref().orderByChild("checker/update_available").equalTo("false").once('value', (snapshot) => {
snapshot.forEach((childSnapshot) => {
console.log("got in here");
console.log(childSnapshot.val())
});
})
}
我想这可能完全错了。此刻我觉得被卡住了。非常感谢您的帮助。我主要关心的是如何绕过uid
或通过它进行查询
以下内容应该有效(但未经过测试(。
注意Promise.all()
的使用,因为您需要并行更新数量可变的users
节点。
exports.versionUpdate = functions.database.ref('/app_info').onUpdate((change, context) => {
const beforeData = change.before.val(); // data before the update
const afterData = change.after.val(); // data after the update
if (beforeData.version !== afterData.version) {
const promises = [];
const usersRef = admin.database().ref('/users');
return usersRef.once('value', function(snapshot) {
snapshot.forEach(childSnapshot => {
const uid = childSnapshot.key;
promises.push(usersRef.child(uid + '/checker/update_available').set(true));
});
return Promise.all(promises);
});
} else {
return null;
}
});