2017-05-13 4 views
0

Hallo ich entwickle eine ionic2 App mit firebase.So hier habe ich einen Anbieter namens Students-services.Ich habe eine Funktion im Dienst für einen Knoten durchlaufen und erhalten Werte.nach dem wird es Es funktioniert in einem Array. Alle funktionieren. Aber ich kann keine Daten in meine page.ts-Datei zurückgeben. es zeigt undefined.Aber wenn ich es in die Konsole legen kann ich die Werte sehen, was ich brauche. Kann mir bitte jemand helfen.Wie gebe ich diese Daten zurück?

hier ist meine Funktion in Studenten Dienstleistungen.

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

Ich rief die Funktion in meine page.ts Datei

console.log(this.studentservice.settropies(studentId)); 
+0

Willkommen bei SO. Lesen Sie [** Hilfe fragen **] (http://stackoverflow.com/help/how-to-ask), bevor Sie eine Frage stellen. – Aravind

+0

Mögliches Duplikat von [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Saravana

Antwort

0

Wenn Sie zurückkehren, dass Array nicht definiert ist, weil

query.on("value",(snapshot)=> { 

ein asynchrones Ereignis ist.

Eine Möglichkeit, dies zu beheben, wird mit eventEmitter

In Ihrem Service:

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

Und dann in Ihrem page.ts

constructor(){ 

     this.studentservice.$finished.subscribe((result)=>{ 
      console.log(this.studentservice.settropies(studentId)); 

     }); 
    } 
Verwandte Themen