使用解析服务器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。
我真的没有工作。 - 'previousOffer'获取'currentOffer'数据(很棒!),但它不会保存在数据库中; - 'currentOffer'获得newOffer结构,现在我认为它不正确。它得到了交换收集结构。为什么会发生这种想法? –
我真的不明白你想说什么。也许你可以用更新的细节编辑问题?并准确地指出问题所在? – ZeekHuge
btw为什么'ex'的'currentOffer'字段gettting'newOffer'结构不正确?不是你想要什么? – ZeekHuge