2017-09-04 2 views
0

Ich muss ein neues Element erstellen und aktualisieren Sie von "aktuellen Angebot" und das alte Angebot als "Previews Angebot". Das ist, was ich habe:Setzen Zeiger mit Parse-Server SDK

this.saveCounterOffer = function(currentOffer, price) { 
    price = parseInt(price, 10); 

    var offers = Parse.Object.extend("Offer"); 
    var exchanges = Parse.Object.extend("Exchange"); 

    var offer = new offers(); 
    var offerQuery = new Parse.Query(offers); 
    var exchangesQuery = new Parse.Query(exchanges); 

    var newOffer = Object.assign(offer, currentOffer); 
    delete newOffer.id; 
    newOffer.set("price", price); 
    newOffer.save().then(function(response) { 
     exchangesQuery.find({ 
     success: function(exchange) { 
      exchange.forEach(function(ex) { 
      if(ex.get("currentOffer").id == currentOffer.id) { 
       //everything works fine until here 
       ex.set("currentOffer", newOffer); 
       ex.set("previousOffer", currentOffer); 
       console.log('Ex:', ex); 
       ex.save().then(function(response) { 
       console.log('response', response); 
       }); 
      } 
      }); 
     }, error: function(err) { 
      console.log("error", err); 
     } 
     }); 
    }); 

tue ich in den Angeboten Tabelle ein neues Angebot erstellen, aber ich bekomme die folgende Fehlermeldung für den Status in der Exchange-Tabelle zu ändern:

{"code":111,"error":"schema mismatch for Exchange.previousOffer; 
    expected Pointer<Offer> but got Object"} 

Ich verstehe es erwartet ein Zeiger, aber ich weiß nicht, wie man einen Zeiger setzt. Kann jemand helfen?

Antwort

0

So konvertiert der Parse-Server automatisch eine Parse.Object in einen Zeiger, wenn es set() in eine andere Parse.Object ist. Aber in Ihrem Fall, sieht wie currentOffer ist kein Parse.Object, daher der Fehler.

Sie können eine Pointer<Parse.Object> erstellen, wenn Sie die id dieses Objekts haben, das aussieht wie Sie, da Sie currentOffer.id verwenden. Sie müssen nur Parse.Object#createWithoutData() verwenden.

Der modifizierte Code wird wie folgt aussehen:

... 
if(ex.get("currentOffer").id == currentOffer.id) { 
    ex.set("currentOffer", newOffer); 
    // create new pointer and set it 
    var pointerToCurrentOffer = offer.createWithoutData(currentOffer.id); 
    ex.set("previousOffer", pointerToCurrentOffer); 
    console.log('Ex:', ex); 
... 

EDIT:

oder noch besser, so etwas wie dieses:

... 
if(ex.get("currentOffer").id == currentOffer.id) { 
    ex.set("previousOffer", ex.get("currentOffer")); 
    ex.set("currentOffer", newOffer); 
    console.log('Ex:', ex); 
... 

EDIT 2.0:

Auch bei Verwendung von Promise ist es immer eine gute Idee, die Fehler zu bekommen, sonst sind sie komplett verloren. Zum Beispiel dieser Teil Ihres Codes:

... 
ex.save().then(function(response) { 
    console.log('response', response); 
}); 
... 

Wenn ein Fehler im obigen Code auftritt, wird es verloren gehen. Sie können dies tun, um den Fehler zu erhalten:

... 
ex.save().then(function(response) { 
    console.log('response', response); 
}, function (error) { 
    console.error('error', error); 
}); 
... 

Für weitere Informationen können Sie die documentation überprüfen.

+0

Ich arbeite nicht wirklich. - 'previousOffer' wird' currentOffer' Daten (großartig!), Aber es wird nicht in der Datenbank gespeichert; - 'currentOffer' bekommt die newOffer-Struktur und jetzt glaube ich nicht, dass es richtig ist. es erhält die Austauschsammelstruktur. Irgendwelche Ideen warum es passiert? –

+0

Ich habe nicht wirklich verstanden, was Sie sagen wollen. Vielleicht könnten Sie die Frage mit neueren Details bearbeiten? und genau feststellen, was das Problem ist? – ZeekHuge

+0

BTW Warum ist das 'currentOffer'-Feld von' ex' getting 'newOffer' Struktur nicht korrekt? Ist das nicht was du willst? – ZeekHuge

Verwandte Themen