【问题标题】:Return undefined with a method inside a javascript class使用 javascript 类中的方法返回未定义
【发布时间】:2020-10-05 10:40:42
【问题描述】:

我有一个带有一个简单方法的类,它有一个 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?

【问题讨论】:

    标签: javascript class asynchronous google-cloud-firestore


    【解决方案1】:

    你可以尝试使用 async/await

    class Alumnes {
        async llista(ordre) {
            var alumnes = db.collection('alumnes').orderBy('cognoms', ordre);
    
            try {
                var allAlumnes = await alumnes.get();
                var llistaAlumnes = [];
                allAlumnes.forEach((doc) => {
                    llistaAlumnes.push(doc.data().nom + ' ' + doc.data().cognoms);
    
                });
                return llistaAlumnes;
            } catch (err) {
                console.log(err);
            }
        }
    }

    【讨论】:

    • 谢谢!它返回一个 Promise,但我是这个异步方法的新手,我不知道如何获取完整的数组。我现在看到下一条评论,我可以获得所有数组内容!再次感谢!
    【解决方案2】:

    为了从函数中得到一些结果,它必须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);
          });
      }
    }
    

    然后你可以找出结果,但记住以异步方式获取它,因为对 db 的调用不是即时的

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

    【讨论】:

    • 谢谢!它完美地工作。简单而完美的解决方案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2017-07-06
    相关资源
    最近更新 更多