首页 > 解决方案 > 使用 javascript 类中的方法返回未定义

问题描述

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

我班的代码是:

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);

但它永远返回undefined因为 firestore 使用异步函数。firestore 结束通话后如何设置 llistaAlumnes?

标签: javascriptclassasynchronousgoogle-cloud-firestore

解决方案


为了从函数中获得一些结果,它必须return有所作为。在您的情况下,您应该像这样返回承诺

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);
      });
  }
}

然后您可以找出结果,但请记住以异步方式获取结果,因为对数据库的调用不是即时的

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

推荐阅读