2016-11-03 18 views
2

SPAを初めて開発しましたが、React、Vue、AngularなどのJSフレームワークは使用していません。私のプロジェクトはfirebase sdkとjqueryを使ってDOM要素にアクセスします。多対多関係のfirebaseを照会する方法は?

私のアプリでは、ユーザーはプロジェクトに関連付けることができます。それ以来、私はその関係を表すためにuser-projectsproject-usersのパスを持っています。

ユーザが私のアプリにログインすると、ユーザデータを取得するためにusers/uidをリクエストします。その後、私はユーザーに関連するプロジェクトを取得する必要があります。関連するプロジェクトのIDを取得し、最終的に各プロジェクトのデータを要求します。

私はhereと記載されている約束を使用しようとしていますが、コンソールに何も表示されません。

function loadUserProjects() { 
    // 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).on('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 the list of associated projects 
     return ref.child('user-projects/'+user.uid).on('value').then(function(snapshot) { 
      console.log(snapshot); 
      return snapshot; 
     }); 
    }).then(function (projectsSnapshot) { 
     console.log(projectsSnapshot); 

     // List associated projects 
     var project_options = ''; 
     projectsSnapshot.forEach(function (e) { 
      project_options += '<option value="'+e.key+'">'+e.val()+'</option>'; 
     }); 
     if (! project_options) { 
      project_options = '<option disabled selected value>- Ningún proyecto -</option>'; 
     } 

     $('#project_selected').html(project_options); 
    }, function(error) { 
     // Something went wrong. 
     console.error(error); 
    }); 
} 

私は、この時点で<select>true値(追加の要求は、各プロジェクトの完全なデータを照会する必要がある)が移入されますので、私は、一つの追加の要求を使用する必要があることを知っています。しかし、私はコンソールにメッセージを取得していません。

ありがとうございます。

その後、各プロジェクトで異なるレベルの権限を定義し、プロジェクトが特定のユーザーに割り当てられたときにレベルを関連付ける必要があります。当初はリアルタイムにとても興奮していましたが、firebaseは私が想定していたよりも複雑になっているようです。

答えて

0

ファイアベースon()リスナーは複数のイベントに応答できます。約束は一度しか解決できません。そのため、Firebaseのonce()操作を使用する場合にのみ使用可能です。

return ref.child('user-projects/'+user.uid).once('value'); 
+1

ありがとうございます。今私は配列 '' 'project_keys''でプロジェクトキーを持っています。 ref.child( 'projects /' + project_keys [i])。once( 'value') '' '私はあるプロジェクトのプロジェクトデータを取得できます。アレイを使用して1つのリクエストですべてを取得する方法は? – JCarlos

関連する問題