我正在努力从firebase中检索数据。基本上我正在创建一个约会应用程序,当用户“喜欢”某人时,它应该检查显示的用户喜欢的人数组,以查看当前用户是否在那里,然后如果他们是“匹配”他们
我有这个功能:
pullFromFirebase = (displayedUser) => {
return new Promise((resolve, reject) => {
firebase.database().ref('users/' + displayedUser.id + '/usersLiked/').once('value').then(function(snapshot) {
const users = Object.keys(snapshot.val()).map(function(key) {
return snapshot.val()[key];
})
});
})
}
这个功能正常,当我在console.log(用户)时,我得到了喜欢的人的数组。但是,当我这样称呼这个函数时
async checkForMatch (currentUser, displayedUser) {
const likedUsers = await this.pullFromFirebase(displayedUser);
console.log(likedUsers, 'likedUsers');
}
控制台中没有记录任何内容?当我拿走异步的东西时,console.log只是说它正在等待。我做错了什么或为什么我的checkformatch
函数中没有显示用户?
答案 0 :(得分:4)
您从未在pullFromFirebase
方法
结帐代码
pullFromFirebase = (displayedUser) =>
{
return new Promise((resolve, reject) =>
{
firebase.database().ref('users/' + displayedUser.id + '/usersLiked/').once('value').then(function (snapshot)
{
const users = Object.keys(snapshot.val()).map(function (key) {
return snapshot.val()[key];
})
resolve(users); // <--- here is the fix
});
})
}
答案 1 :(得分:0)
你可能在那里不必要地添加了一个Promise,你的函数返回一个永远无法解析的Promise。 users
已经返回了承诺,但您还需要返回.then()
内的pullFromFirebase = (displayedUser) => {
return firebase.database().ref('users/' + displayedUser.id + '/usersLiked/').once('value').then(function(snapshot) {
const users = Object.keys(snapshot.val()).map(function(key) {
return snapshot.val()[key];
});
return users;
});
}
:
pullFromFirebase = (displayedUser) => {
return new Promise((resolve, reject) => {
firebase.database().ref('users/' + displayedUser.id + '/usersLiked/').once('value').then(function(snapshot) {
const users = Object.keys(snapshot.val()).map(function(key) {
return snapshot.val()[key];
})
resolve(users);
});
})
}
或者,如果您需要包装Promise,则需要使用返回值来解决它:
<div class="form-row form-group">
<div class="col-sm-2">{{form.author.label}}{% if form.author.flags.required %}*{% endif %}</div>
<div class="col-auto">{{form.author(class="form-control",size=40)}}</div>
</div>
<div class="form-row form-group">
<div class="col-sm-2">{{form.title.label}}{% if form.title.flags.required %}*{% endif %}</div>
<div class="col-auto">{{form.title(class="form-control",size=60)}}</div>
</div>