2017-09-04 15 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

したがって、Parse.Objectset()の場合、parse-serverは自動的にParse.Objectをポインタに変換します。しかしあなたの場合、currentOfferParse.Objectではないので、エラーと思われます。

currentOffer.idを使用しているため、そのオブジェクトのidがある場合は、Pointer<Parse.Object>を作成することができます。 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); 
... 

EDIT:さらに良い

または、このような何か:

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

EDIT 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構造体を取得しましたが、今は正しいとは思いません。交換コレクション構造を取得します。なぜそれが起こっているのすべてのideias? –

+0

私は本当にあなたが言うことを理解していませんでした。もっと詳細な質問を編集できますか?問題の内容を正確に特定します。 – ZeekHuge

+0

btwなぜ 'ex'の' currentOffer'フィールドが 'newOffer'構造体を取得するのが正しいのですか?それはあなたが望むものではありませんか? – ZeekHuge

関連する問題