使用javascript类中的方法返回undefined
我有一个类,它有一个简单的方法,有一个firestore调用,我认为它是异步的。 问题是,当我调用这个方法时,它返回未定义的,我不知道如何实现回调函数来返回我需要的数组 我的班级代码是:使用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) {
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);
}
}
}
谢谢!它返回一个承诺,但我是这个异步方法的新手,不知道如何获得完整的数组。我现在看到下一条评论,我可以得到所有的数组内容!再次感谢!谢谢它工作得很好。简单而完美的解决方案!谢谢