0

Parse.com からデータを取得し、すべてのデータが読み込まれた後にイベントをトリガーしたいと考えています。メソッドgetEinstellerDatagetObjektDatagetVermieterDataは、parse.com データベースへの非同期クエリが含まれています。クエリ内のオブジェクトは正しく取得されます。

http://www.html5rocks.com/en/tutorials/async/deferred/に従って、そのコードを書きました。

私の問題は、var combinedPromise = $.when(getVermieterData(vermieterId), getEinstellerData(einstellerId));グローバル変数への最初の約束で実際に書いたパラメーターが未定義のように見えることです。

データをフェッチする次の関数があります。

getData = function() {

        var promise = getObjektData();

        promise.done(
            function(){

                var combinedPromise = $.when(getVermieterData(vermieterId), getEinstellerData(einstellerId));
                combinedPromise.done(function(){

                    console.log(einstellerData);
                    console.log(vermieterData);

                    $(that).trigger("setWohnungsDetails");
                });
            });

    },

これらは、クエリを含む 3 つの関数です。

getEinstellerData = function(){
    einstellerData = [];

    var queryEinsteller = new Parse.Query(erstellerDataObject);

    queryEinsteller.equalTo("ID", parseInt(einstellerId));

    queryEinsteller.first({
      success: function(einsteller) {

        var vorname = einsteller.get("Vorname");
        var nachname = einsteller.get("Nachname");
        var strasse = einsteller.get("Strasse");
        var hausnummer = einsteller.get("Hausnummer");
        var plz = einsteller.get("PLZ");
        var ort = einsteller.get("Ort");
        var email = einsteller.get("Email");
        var telefon = einsteller.get("Telefon");

        einstellerData.push({ vorname: vorname, nachname: nachname, strasse: strasse, hausnummer: hausnummer, plz: plz, ort: ort, email: email, telefon: telefon });

        console.log(einstellerData);
      },
      error: function(error) {
        alert("Error: " + error.code + " " + error.message);
      }
    });
},

getVermieterData = function(){
    vermieterData = [];

    var queryVermieter = new Parse.Query(vermieterDataObject);

    queryVermieter.equalTo("ID", parseInt(vermieterId));

    queryVermieter.first({
      success: function(vermieter) {

        var vorname = vermieter.get("Vorname");
        var nachname = vermieter.get("Nachname");
        var strasse = vermieter.get("Strasse");
        var hausnummer = vermieter.get("Hausnummer");
        var plz = vermieter.get("PLZ");
        var ort = vermieter.get("Ort");
        var email = vermieter.get("Email");
        var telefon = vermieter.get("Telefon");

        vermieterData.push({ vorname: vorname, nachname: nachname, strasse: strasse, hausnummer: hausnummer, plz: plz, ort: ort, email: email, telefon: telefon });

        console.log(vermieterData);
      },
      error: function(error) {
        alert("Error: " + error.code + " " + error.message);
      }
    });
},

getObjektData = function() {

    objectId = localStorage.getItem("currentWohnung");

    objektData = [];

    var queryObjekt = new Parse.Query(objektDataObject);

    queryObjekt.get(objectId, {
      success: function(wohnung) {

        var vermieter_id = wohnung.get("Vermieter_id");
        var einsteller_id = wohnung.get("Einsteller_id");
        var strasse = wohnung.get("Strasse");
        var hausnummer = wohnung.get("Hausnummer");
        var plz = wohnung.get("PLZ");
        var ort = localStorage.getItem("selectedStadt");
        var bild = wohnung.get("Bild");
        var flaeche = wohnung.get("Flaeche");
        var freitext = wohnung.get("Freitext");
        var gesamtmiete = wohnung.get("Gesamtmiete");
        var kaution = wohnung.get("Kaution");
        var miete = wohnung.get("Miete");
        var nebenkosten = wohnung.get("Nebenkosten");
        var raucher = wohnung.get("Raucher");
        var zimmer = wohnung.get("Zimmer");


        objektData.push({ vermieter_id: vermieter_id, einsteller_id: einsteller_id, strasse: strasse, hausnummer: hausnummer, plz: plz, ort: ort, bild: bild, flaeche: flaeche, freitext: freitext, gesamtmiete: gesamtmiete, kaution: kaution, nebenkosten:nebenkosten, raucher: raucher, zimmer: zimmer });

        console.log(objektData);

        einstellerId = einsteller_id;
        vermieterId = vermieter_id;
      },
      error: function(object, error) {
        console.log("error" + error);
      }
    });

そしてここに私のコンソール出力:

DetailStart init DetailStart.js:3
DetailController init DetailController.js:10
init Detail.js Detail.js:17
Uncaught TypeError: Cannot call method 'done' of undefined Detail.js:34
DetailStart.Detail.getData Detail.js:34
DetailStart.Detail.init Detail.js:21
DetailStart.DetailController.init DetailController.js:13
DetailStart.init DetailStart.js:4
(anonymous function) detail.html:115
[Object]
0: Object
length: 1
__proto__: Array[0]

ここで何が間違っていたのでしょうか!?

前もって感謝します ;)

4

2 に答える 2