2016-04-18 1 views
0

Meine Funktion nimmt ein einzelnes Objekt von der Datenbank parse.com. Ich muss das Ergebnis der Abfrage an eine andere Variable senden. Das ist meine Funktion:Ergebnis von Parse.Query zu einer anderen Ausgabevariablen, Tabelle. JAVASCRIPT und PARSE.COM

function pobierzOcene(id){ 
    var ocena = new Ocena(); 
    var q = new Parse.Query(Parse.Object.extend("Ocena")); 
    q.equalTo("objectId",id); 
    q.first({ 
     success: function(result){ 
     ocena.przedmiot = result.get("ocenaPrzedmiot").id; 
     ocena.data = result.createdAt; 
     ocena.waga = result.get("ocenWaga"); 
     ocena.wartosc = result.get("ocenaWartosc"); 
     return ocena; 
     }, 
     error: function(e){ 
     console.log(e.message()); 
     return e.message(); 
     } 
    }); 
} 

Ich benutze "Return Ocena;" um dies zu tun. Und in einer anderen Funktion habe ich:

var o = pobierzOcene(oceny[j].id); 

Warum Variable o ist leer?

Antwort

0

Aufgrund der asynchronen Art von Parse-Abfragefunktionen. Ihre Funktion pobierzOcene erreicht das Ende ihrer Ausführung, da sie nicht auf die Beendigung der asynchronen Abfragefunktion q.first wartet. Eine Möglichkeit, es von doin ist die Funktion neu zu schreiben, mit Parse Promises:

function pobierzOcene(id){ 
    var q = new Parse.Query("Ocena"); 
    q.equalTo("objectId",id); 
    return q.first(); // return a promise to wait on 
} 

Rufen Sie die Funktion wie folgt aus:

pobierzOcene(oceny[j].id).then(function(result) { 

    // process the results here instead 

}, function(error) { 
    console.log(error); // error 
}); 
+0

Danke für Informationen. Ich weiß nicht über asynchrone Natur od Parse Funktionen, können Sie mir sagen, wie funktioniert Parse Promise? Wie kann ich Daten mit parse.promise erhalten? –

+0

Ich habe Ihnen oben ein Beispiel gegeben. Lesen Sie die Parse-Dokumente, um mehr zu erfahren: https://www.parse.com/docs/js/guide#promises –

+0

Sagen Sie mir nur, Punkt zu Punkt, wie funktioniert oben funktioniert. In meinem Wissen: 1. Starten Sie die Funktion pobierzOcene, 2. Abfrage, finde Objekt, und zurück q.first(), gleichzeitig Funktion pobierzOcene warten auf Ergebnis 3. Ergebnis wird gesendet, um nach " "Und ich arbeite an diesen Daten. Kann ich das verstehen? –

0

Ich habe ein zweites Problem mit der Funktion .than ich denke .. Funktion nimmt eine Liste der Schüler und ihrer Attribute (Name, Vorname, ID und Grad). In der Basis: Student 0 hat 3 Grad. Student 1 hat keine Grade. Student 2 hat 4 Grad.

Meine Funktion:

function DownloadList(){ 
    var query = new Parse.Query(Parse.Object.extend("Groups")); 
    var Students; 
    var degree = new Degree(); 

    query.equalTo("objectId",GroupId); 
    query.include("listStudents"); 
    query.include("degree"); 
    query.include("StudentDegrees"); 
    query.include("SubjectDegree"); 
    query.first({ 
    success:function(res){ 
     var degree = res.get("Degree").id; 
     var listOfStudents = res.get("listStudents"); 
     Students = new Array(); 

     for (var i=0; i<listOfStudents.length ; i++){ 
     student = new Student(); 
     student.name = listOfStudents[i].get("name"); 
     student.surname = listOfStudents[i].get("surname"); 
     student.index = listOfStudents[i].get("index"); 
     student.objectId = listOfStudents[i].id; 

     var degrees = listOfStudents[i].get("StudentDegrees"); 
     for (var j in degrees){ 
      takeADegree(degrees[j].id).then(function(result){ 
      var degree = new Degree(); 
      degree.subject = result.get("SubjectDegree"); 
      if (subject == degree.subject.id){ 
       degree.date = result.createdAt; 
       degree.weight = result.get("degreeWeight"); 
       degree.value = result.get("degreeValue"); 
       student.AddDegree(degree); 
      } 
      }, 
      function(error){ 
      console.log(error); 
      }); 
     } 
     Students.push(student); 
     } 
     console.log(Students); 
    }, 
    error:function(err){ 
     console.log(err.message); 
    } 
    }); 
} 

Und Funktion takeADegree (id):

function takeADegree(id){ 
    var q = new Parse.Query("Degree"); 
    q.equalTo("objectId",id); 
    return q.first(); 
} 

Im Bild das Ergebnis der Funktion: result

Felder, die durch die Pfeile angezeigt (oceny -degrees) sollte wie folgt aussehen: Student 0 = oceny: Array [3], Student 1 = oceny: Array [0], Student 2 = oceny: Array [4]. Wo ist das Problem jetzt?

Verwandte Themen