使用javascript类中的方法返回undefined

使用javascript类中的方法返回undefined,javascript,class,asynchronous,google-cloud-firestore,Javascript,Class,Asynchronous,Google Cloud Firestore,我有一个类,它有一个简单的方法,有一个firestore调用,我认为它是异步的。 问题是,当我调用这个方法时,它返回未定义的,我不知道如何实现回调函数来返回我需要的数组 我的班级代码是: class Alumnes { llista(ordre) { db.collection('alumnes') .orderBy('cognoms', ordre) .get() .then(function (doc) {

我有一个类,它有一个简单的方法,有一个firestore调用,我认为它是异步的。 问题是,当我调用这个方法时,它返回未定义的,我不知道如何实现回调函数来返回我需要的数组

我的班级代码是:

class Alumnes {
    llista(ordre) {
      db.collection('alumnes')
        .orderBy('cognoms', ordre)
        .get()
        .then(function (doc) {
            var llistaAlumnes = [];
            doc.forEach((doc) => {
                llistaAlumnes.push(doc.data().nom + ' ' + doc.data().cognoms);
            });
            return llistaAlumnes;
        })
        .catch(function (err) {
            console.log(err);
        });
}
我用这个代码来称呼它:

var alumnes = new Alumnes();
var llistaAlumnes = alumnes.llista('asc');
console.log(' llistaAlumnes', llistaAlumnes);
但由于firestore使用异步函数,因此它返回未定义的值。
在firestore结束调用后,如何设置llistaAlumnes?

为了从函数中获得一些结果,它必须
返回一些东西。在你的情况下,你应该像这样回报承诺

class Alumnes {
  llista(ordre) {
    return db.collection('alumnes')
      .orderBy('cognoms', ordre)
      .get()
      .then(function (doc) {
        var llistaAlumnes = [];
        doc.forEach((doc) => {
          llistaAlumnes.push(doc.data().nom + ' ' + doc.data().cognoms);
        });
        return llistaAlumnes;
      })
      .catch(function (err) {
        console.log(err);
      });
  }
}
然后,您可以找到结果,但请记住以异步方式获取结果,因为对db的调用不是即时的

var alumnes = new Alumnes();
var llistaAlumnes = alumnes.llista('asc');
llistaAlumnes.then(res => {
   console.log(' llistaAlumnes', res);
});

您可以尝试使用async/await

class Alumnes{
异步llista(ordre){
var alumnes=db.collection('alumnes').orderBy('cognoms',ordre);
试一试{
var allAlumnes=等待alumnes.get();
var llistaAlumnes=[];
allAlumnes.forEach((doc)=>{
listaalumnes.push(doc.data().nom+''+doc.data().cognoms);
});
返回利斯塔阿卢姆内斯;
}捕捉(错误){
控制台日志(err);
}
}

}
谢谢!它返回一个承诺,但我是这个异步方法的新手,不知道如何获得完整的数组。我现在看到下一条评论,我可以得到所有的数组内容!再次感谢!谢谢它工作得很好。简单而完美的解决方案!谢谢