2017-09-04 36 views
0

我需要創建一個新元素,並將其從「當前報價」和舊報價更新爲「預覽報價」。這是我有:使用解析服務器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); 
     } 
     }); 
    }); 

我確實造成在報價表中的新報價,但我得到以下錯誤在Exchange表更改狀態:

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

我理解它的期待一個指針,但我不知道如何設置一個指針。任何人都可以幫忙嗎?

回答

0

因此,解析服務器在set()到另一個Parse.Object時自動將Parse.Object轉換爲指針。但在你的情況下,看起來像currentOffer不是Parse.Object,因此錯誤。

如果您有該對象的id,您可以創建一個Pointer<Parse.Object>,因爲您使用的是currentOffer.id,所以該對象看起來像您一樣。你只需要使用Parse.Object#createWithoutData()

修改後的代碼會是這個樣子:

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

編輯:

,甚至更好,是這樣的:

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

編輯2.0

另外,使用Promise時總是一個好主意來獲取錯誤,否則它們會完全丟失。例如,您的代碼的這部分:

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

如果在上述代碼中發生任何錯誤,它將會丟失。你可以這樣做是爲了得到錯誤:

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

欲瞭解更多信息,您可以檢查documentation

+0

我真的沒有工作。 - 'previousOffer'獲取'currentOffer'數據(很棒!),但它不會保存在數據庫中; - 'currentOffer'獲得newOffer結構,現在我認爲它不正確。它得到了交換收集結構。爲什麼會發生這種想法? –

+0

我真的不明白你想說什麼。也許你可以用更新的細節編輯問題?並準確地指出問題所在? – ZeekHuge

+0

btw爲什麼'ex'的'currentOffer'字段gettting'newOffer'結構不正確?不是你想要什麼? – ZeekHuge