2015-01-26 2 views
0

제대로 작동하지 않는 beforeSave() 구문 분석 클라우드 함수를 추가했습니다. 여기 구문 분석 beforeSave() 클라우드 코드 함수가 작동하지 않습니다.

는 배경이다 I 형 ParseRelation의 사용자 라는 열이 UserRewards라는 클래스가 있습니다. 이것은 정확하게 하나의 관계로 이루어 지는데, 하나의 객체가 ParseUser 인 단일 객체를 가지고 있습니다. 새로운 열 pUser이 기능에서 설정하고 싶습니다. 사용자 관계를 조회하고 파서 사용자을 찾은 다음 해당 사용자에게 pUser을 설정합니다. 여기

내가

Parse.Cloud.beforeSave("UserRewards", function(request, response) { 
    var relation = request.object.relation("user"); 
    relation.query().find({ 
      success: function(list) { 
       console.log("looked up relation"); 
       if (list.length > 0) { 
        var pUser = list[0]; 
        request.object.set("pUser", pUser); 
        console.log("updated pUser"); 
       } 
      }, 
       error: function(error) { 
       console.error("unable to lookup relation"); 
      } 
    }); 
    response.success(); 
이 코드의

});

UserRewards 행을 업데이트하면이 함수가 호출됩니다. 하지만 콘솔이나 오류 로그가 전혀 없습니다.

아이디어가 있으십니까?

답변

0

함수는 쿼리가 완료되기 전에 response.success()를 실행하여 취소합니다.

Parse.Cloud.beforeSave("UserRewards", function(request, response) { 
    var relation = request.object.relation("user"); 
    relation.query().find().then(function(list) { 
     console.log("looked up relation"); 
     if (list.length > 0) { 
      var pUser = list[0]; 
      request.object.set("pUser", pUser); 
      console.log("updated pUser"); 
     } 
     response.success(); 
    }, function(error) { 
     console.error("unable to lookup relation"); 
     response.error(error); 
    }); 
}); 

편집가 나는 관계의 속성 포인터 속성을 동기화하고 묻는와 후속 질문을 이해 생각 ... 쉽게 약속과 함께보고, 시도 ...

Parse.Cloud.beforeSave("UserRewards", function(request, response) { 
    var relation = request.object.relation("user"); 
    relation.query().find({ 
      success: function(list) { 
       console.log("looked up relation"); 
       if (list.length > 0) { 
        var pUser = list[0]; 
        request.object.set("pUser", pUser); 
        console.log("updated pUser"); 
       } 
       response.success(); 
      }, 
       error: function(error) { 
       console.error("unable to lookup relation"); 
       response.error(error); 
      } 
    }); 
}); 

또는 , 그 중 하나만 저장하기 전에 설정된다고 가정합니다. 이것은 관계가 비어 있음을 감지하여 수행 할 수 있습니다. 이 경우, ...

Parse.Cloud.beforeSave("UserRewards", function(request, response) { 
    var relation = request.object.relation("user"); 
    relation.query().find().then(function(list) { 
     console.log("looked up relation"); 
     if (list.length > 0) { 
      var pUser = list[0]; 
      request.object.set("pUser", pUser); 
      console.log("updated pUser"); 
      return Parse.Promise.as(); // we're done, this will pass nothing to the next step 
     } else { // the relation is empty, so the user pointer must be set 
      var pointer = request.object.get("pUser"); 
      return pointer.fetch(); // this will pass the pUser to the next step 
     } 
    }).then(function(pUser) { 
     if (pUser) { 
      // must have found an empty relation in the last step. add the user pointer to it 
      request.object.relation.add(pUser); 
     } 
     response.success(); 
    }, function(error) { 
     console.error("unable to lookup relation"); 
     response.error(error); 
    }); 
}); 

(코드가 안된 주) 포인터를 가져 오기 위해 또 하나의 비동기 단계를 수행합니다.

+0

안녕하세요, 귀하의 답변에 감사드립니다. 그것은 트릭을했다. 후속 질문이 있습니다. 관계가 설정되어 있는지 확인하고 설정되지 않은 경우 포인터를 설정하려면 어떻게해야합니까? 그리고 설정되지 않은 경우 관계를 설정하지만 포인터가 설정되어 있습니까? 위의 답변을 자유롭게 수정하십시오. 약속은 좋은 것입니다. – amit

+0

@amit - 최선을 다했습니다. – danh

+0

관계가 nil 인 경우이 작업을 수행합니까? 두 번째 단계에서 – amit

관련 문제