根据密钥获取子项(Firebase)

时间:2016-11-10 01:15:31

标签: javascript jquery ajax firebase firebase-realtime-database

我的firebase db中有三个节点:usersprojectsuser-projects

我想使用项目名称填充<select>,并根据用户的偏好选择一个选项。为了实现我遵循下一步:

  1. 获取经过身份验证的用户的数据:users/uid
  2. 获取与该用户关联的项目:user-projects/uid
  3. 使用键将一个对象转换为字符串数组。
  4. 每个密钥执行一个请求,并使用$.when.apply($, requests)等待所有结果(以保持订单)。
  5. 最后用选项显示选择并预先选择其中一个。
  6. 我的问题是,真的所有这些步骤都是必要的吗?

    如果我将项目的名称存储在user-projects中,我可以避免最后3个步骤,但在这种情况下,我必须在项目更改时更新更多节点(我真的不想这样做)这一点)。

    此外,我一直在寻找使用firebase和一个JS框架(react.js,vue.js)的示例,但似乎异步请求是由其他库创建的,与这些视图框架无关。

    我正在使用下一行代码:

    // Authenticated user
    var user = firebase.auth().currentUser;
    
    // General reference to the real time db
    var ref = firebase.database().ref();
    
    // Request the user data
    ref.child('users/'+user.uid).once('value').then(function(snapshot) {
        var user_data = snapshot.val(); 
        // console.log(user_data);
    
        // Global variable to store the id of the selected project
        project_selected_key = user_data.project_selected;
    
        // Get associated projects
        return ref.child('user-projects/'+user.uid).once('value');
    }).then(function (projectsSnapshot) {
    
        // projectsSnapshot.val() != project_keys
        var project_keys = [];
        projectsSnapshot.forEach(function (e) {
            project_keys.push(e.key);
        });
    
        // it is not possible :/
        // return ref.child('projects').children(project_keys).once('value');
    
        // one request per key
        var requests = [];
        var results = [];
        project_keys.forEach(function (project_key) {
            var request = ref.child('projects/'+project_key).once('value', function (snapshot) {
                results.push(snapshot.val());
            });
            requests.push(request);
        });
    
        // wait until all requests are complete
        $.when.apply($, requests).then(function() {
            console.log(results);
        }, function (error) {
            console.log('One request has failed');
        });
    
    }, function (error) {
        // Something went wrong
        console.error(error);
    });
    

0 个答案:

没有答案