我认为我的密钥,数组,值和ID在这里混淆了,但似乎无法弄清楚。
我想要一种方法让当前用户进入ProfileCtrl
控制器。这是我使用promises $waitForAuth
和once
的当前实现。但我不确定目前是否实施。
var user = "";
var key = "";
var uids = Users.allUIDs();
console.log(uids);
Auth.$waitForAuth().then(function () {
var uid = Auth.$getAuth().uid;
console.log(uid);
for (var i = 0; i < uids.length; i++) {
console.log(uids[i].value().toString());
if (uids[i].value() == uid) {
var userKeyRef = new Firebase(firebaseUrl + uids + uids[i]);
userKeyRef.once('value').then(function(snapshot) {
key = snapshot.val();
}).then(function(){
user = new Firebase(firebaseUrl + users).child(key).val();
});
console.log(user);
console.log('User exists')
break;
}
}
$scope.user =user;
}).catch(function (error) {
console.log(error);
})
我检查数组中的uid,如果它们与经过身份验证的用户匹配,我会从uids数组中获取密钥,并使用该密钥在users数组中查找用户对象。这是我的数据库:
{
"uids" : {
"7d34fb85-813c-4586-857e-f062aed67f32" : {
"-KDQDk5vwJXmFngwI7iQ" : {
"registered" : true
}
}
},
"users" : {
"-KDQDk5vwJXmFngwI7iQ" : {
"email" : "random@gmail.com",
"firstname" : "Random",
"lastname" : "Person",
"uid" : "7d34fb85-813c-4586-857e-f062aed67f32"
}
}
}
有一个更清晰的例子,当我console.log
从我的服务中返回的uid时,它看起来像:
这意味着uid正在经历?
以下是我获取uids的代码:
app.factory('Users', ['$firebaseArray','$firebaseObject', 'Auth', function ($firebaseArray, $firebaseObject, Auth) {
var ref = new Firebase("https://urlformyapp.firebaseio.com");
var users = $firebaseArray(ref.child('users'));
var uids = $firebaseArray(ref.child('uids'));
return {
all: function () {
return users;
},
allUIDs: function () {
return uids;
},
get: function (id) {
// Simple index lookup
return users[id];
}
}
}])
有人能告诉我出了什么问题吗?为什么uids[i].value.toString()
没有打印任何内容?鉴于我的数据库结构,我的代码逻辑有什么问题吗?