2016-04-18 5 views
0

私の関数は、データベースparse.comから単一のオブジェクトを受け取ります。私は別の変数にクエリの結果を送る必要があります。これは私の関数である:私が使用しているParse.Queryの結果をanothet出力変数tableに取得します。 JAVASCRIPTと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(); 
     } 
    }); 
} 

「ocena返します。」これをする。そして、別の関数に私が持っている:

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

変数oが空であるのはなぜ?

答えて

0

Parseクエリ関数の非同期性のために。関数pobierzOceneは、非同期クエリ関数q.firstが終了するのを待たずに実行が終了します。それをdoinの一つの方法は、解析と機能を書き換えることで約束:私は.. 機能がかかると思います.than私は、関数の第2の問題を持っている

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

    // process the results here instead 

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

ありがとうございます。私はパーズ関数の非同期性についてはわかりません、あなたは私に教えてください、どのように動作するのですか? parse.promiseでデータを取得するにはどうすればよいですか? –

+0

私はあなたに上記の例を与えました。詳細については、Parseのドキュメントを参照してください。https://www.parse.com/docs/js/guide#promises –

+0

上記の機能がどのように機能するかをポイントツーポイントで教えてください。私の知っているとおり: 1.関数pobierzOceneを開始します。 2.関数pobierzOceneが結果を待っているときに、クエリを実行してオブジェクトを見つけ、q.first()を返します。結果は、 "" "と私はこのデータに取り組んでいます。 わかっていますか? –

0

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

は次のように関数を呼び出します学生とその属性のリスト(名前、姓、ID、度)。ベース: 生徒0は3度です。 生徒1には学位がありません。 生徒2は4度です。

My機能:

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

および機能takeADegree(ID):絵で

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

関数の結果:矢印で示すresult

フィールド(oceny -degrees)は次のようになります。 学生0 = oceny:Array [3]、 学生1 = oceny:配列[0]、 学生2 = oceny:配列[4]。 今どこに問題がありますか?

関連する問題