使用解析服务器SDK设置指针

问题描述:

我需要创建一个新元素,并将其从“当前报价”和旧报价更新为“预览报价”。这是我有:使用解析服务器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"} 

我理解它的期待一个指针,但我不知道如何设置一个指针。任何人都可以帮忙吗?

因此,解析服务器在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