簡體   English   中英

如何對firebase進行異步調用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM