我的firebase db中有三个节点:users
,projects
和user-projects
。
我想使用项目名称填充<select>
,并根据用户的偏好选择一个选项。为了实现我遵循下一步:
users/uid
。user-projects/uid
。$.when.apply($, requests)
等待所有结果(以保持订单)。我的问题是,真的所有这些步骤都是必要的吗?
如果我将项目的名称存储在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);
});