簡體   English   中英

我用這個異步功能怎么了?

[英]What am I doing wrong with this async function?

我正在嘗試學習/實現異步功能,但不確定為什么無法使它正常工作。 我的異步函數中的“用戶”返回未定義。 但是,進行數據庫調用的功能可以正常工作。

 const getUsers = () => {
    const database = firebase.database()
    const users = database.ref('users');
    users.on('value', function(snapshot) {
        const users = []
        snapshot.forEach(function(childSnapshot) {
          let user = childSnapshot.val();
          users.push(user)
        });
        return users
    });
  }

  async function generateRandomPotentialPartner() {
    try {
      const users = await getUsers();
      console.log(users)
    } catch (error) {
      console.log(error)
    }
  }

使用on()的承諾版本而不是使用回調版本,並從getUsers()函數返回該承諾。

使用您當前使用的回調方法,因為回調中的返回不會返回到外部函數,所以根本不會返回任何內容

const getUsers = () => {
  const database = firebase.database()
  const users = database.ref('users');
  // return the on() promise instead of using callback
  return users.on('value').then(snapshot => {
    const users = []
    snapshot.forEach(childSnapshot => {          
      users.push(childSnapshot.val())
    });
    return users
  });
}
 const getUsers = () => {
const database = firebase.database()
const users = database.ref('users');
users.on('value', function(snapshot) {
    const users = []
    snapshot.forEach(function(childSnapshot) {
      let user = childSnapshot.val();
      users.push(user)
    });
    return new Promise((resolve,reject) => {
      if(users.length == 0){
        reject("There are no users"); //--- Handle rejection
      }else {
        resolve(users);
      }

    });
  });
}

您的問題是您沒有返回承諾。 異步Javascript僅與Promise和Chaining有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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