[英]How to make an async call inside other async call with a foreach loop
[英]how to make an async call to firebase?
我正在努力從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
函數中沒有顯示用戶?
你從未在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
});
})
}
你可能在那里不必要地添加了一個Promise,你的函數返回一個永遠無法解析的Promise。 firebase.database
已經返回一個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;
});
}
或者,如果您需要包裝Promise,則需要使用返回值來解決它:
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);
});
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.