Javascript 我的函数调用不返回值

Javascript 我的函数调用不返回值,javascript,google-cloud-firestore,return,Javascript,Google Cloud Firestore,Return,这是我的代码,我将在控制台中打印值,但它不会返回该值 async function fetchData(uid) { return firebase.firestore().collection('users_info') .where("uid","==",uid).get() .then( async function(querySnapshot) {

这是我的代码,我将在控制台中打印值,但它不会返回该值

async function fetchData(uid) {                                           
  return firebase.firestore().collection('users_info')
         .where("uid","==",uid).get()
         .then( async function(querySnapshot) {
             var usr;         
             querySnapshot.forEach(async function(doc) {           
             usr = await doc.data().name;
             console.log(usr);
             return  usr;
         });      
    });       
}

因为您使用的是forEach,所以我假设您处理的数据项不止一个。在这种情况下,最好将它们全部放入一个数组并返回该数组。 我对下面的代码片段添加了一点修改。我认为这应该能奏效

  async function fetchData(uid) {
    return firebase.firestore()
      .collection('users_info')
      .where("uid", "==", uid)
      .get()
      .then(async function(querySnapshot) {
        var usr = [];
        querySnapshot.forEach(async function(doc) {
           const temp = await doc.data().name);
          usr.push(await doc.data().name))
        });
      return usr;
    })
  }

有两件事——首先,如果函数本身正在进行异步工作,并且需要自己的回调继续进行,则需要返回一个承诺。看


此外,foreach不一定用于返回转换后的值的集合,这似乎是您在那里尝试做的事情。如果可以的话,我会用map替换它。

promise回调函数中的return只返回回调,而不返回fetchData。forEach通常会忽略回调的返回值。如果要将函数声明为async,则无需对其中的承诺使用then。这就是等待的目的。它正在工作,需要修复一些小的语法错误。