嗨,我正在开发一个带有Firebase的ionic2应用程序。所以这里我有一个名为 Students-services 的提供程序。我在服务中设置了一个函数,用于通过一个节点并获取值。之后它将显示在数组中。一切都在工作。但是我无法将数据返回到我的 page.ts 文件。它显示未定型。但是,如果我将其放在控制台中,我可以看到所需的值。谁能帮帮我。
这是我在学生服务中的职能。
settropies(userId) {
let total = 0;
let result = [];
let query = this.userProfile.child(userId+'/exams/').orderByKey();
query.on("value",(snapshot) => {
snapshot.forEach((childSnapshot) => {
var key = childSnapshot.key;
var childData = childSnapshot.val();
total = total + childData.marks;
result.push(total);
this.marksarray = result;
});
this.marksarray = result;
console.log(this.marksarray[1]);
});
return this.marksarray;
}
我在我的page.ts文件中调用了该函数
console.log(this.studentservice.settropies(studentId));
当你返回时,该数组是未定义的,因为
query.on("value",(snapshot)=> {
是一个异步事件。
解决此问题的一种方法是使用事件发射器
在您的服务内部 :
public finished$ = new EventEmitter<any>();
snapshot.forEach((childSnapshot)=> {
var key = childSnapshot.key;
var childData = childSnapshot.val();
total=total+childData.marks;
result.push(total);
this.marksarray=result;
this.finished$.emit(result);
});
然后在您的页面中。
constructor(){
this.studentservice.$finished.subscribe((result)=>{
console.log(this.studentservice.settropies(studentId));
});
}