2017-09-04 4 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); 
     } 
     }); 
    }); 

나는 이벤트 테이블에 새로운 제안을 생성하지 않습니다,하지만 난 교환 테이블의 상태를 변경하기위한 다음과 같은 오류가 발생합니다 : 나는 그것을 기대하고있어 이해

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

포인터하지만 포인터를 설정하는 방법을 모르겠습니다. 아무도 도와 줄 수 있니?

답변

0

이렇게하면 Parse.Objectset() 인 경우 parse-server가 자동으로 Parse.Object을 포인터로 변환합니다. 하지만 귀하의 경우 currentOfferParse.Object이 아니므로 오류가 발생합니다.

Pointer<Parse.Object>은 해당 객체의 id이있는 경우 작성하며 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' 필드가'newOffer' 구조체를 gettting하는 것이 정확하지 않습니까? 그게 네가 원하는게 아니야? – ZeekHuge