2017-04-30 2 views
0

내 IOS 응용 프로그램의 클라우드 코드 (Parse)를 작업하고 있었는데 업데이트 된 개체를 저장하려고 할 때마다 작동하지 않는 것으로 나타났습니다. 내가 저장 기능을 제거하면 코드가 작동하며 성공 응답을 출력,하지만 난 그것을 유지하는 경우 오류 얻을 : 내가와 관계없이 솔루션의 무리를 시도했습니다구문 분석 코드 저장 안 함.

Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

을 그들은 무엇입니까, 위의 오류 메시지가 여전히 코드에서 저장 함수가있는 경우 X 코드 디버거에서 인쇄됩니다.

Parse.Cloud.define("removeFriend", function(request, response) { 
Parse.Cloud.useMasterKey(); 
var userObjId = request.params.userObjId; 
var currentUser = request.params.currentUser; 
var query = new Parse.Query(Parse.User); 
query.equalTo("objectId", userObjId); 
//query.include('Friends'); 
query.find({ 
    success: function(results){ 
     var friendsArray = (results[0].get("Friends")); 
     var newFriends = friendsArray.filter(function(x) {return x != currentUser}); 

     results[0].set("Friends", newFriends); 
     results[0].save(); 
     response.success("THIS IS RESULT" + results[0].get("Friends")); 



    }, 
    error: function(){ 
     response.error("The user was not successfully removed."); 

    } 
}); 

}); 

(나는 같은 오류 이전에 비슷한 질문을 만들었지 만 내가 원하는하지 않았다, 그래서 그 이후로 코드를 다시 실행 한 :

(다음은 성공 응답을 인쇄하지 않는 경우)이 코드입니다 두 질문을 섞어 라.)

답변

1

저장은 비동기 적이므로 별도의 스레드에서 발생합니다. save()을 호출 한 직후에 response.success()을 반환하므로 함수가 종료되기 전에 저장이 완료되지 않습니다.

두 가지 옵션이 있습니다. 성공/오류 옵션을 save() 호출에 추가하거나 약속을 사용하십시오. 나는 후자를 선호한다, 당신이 그들에게 매달릴 때 더 깨끗한 코드를 가능케한다.

results[0].save().then(
    function(success) { 
     response.success("THIS IS RESULT" + results[0].get("Friends")); 
    }, 
    function(error) { 
     response.error("There was an error trying to save the object: " + JSON.stringify(error)); 
    } 
); 
+0

감사합니다. 문제가 해결되어 실제로 문제가 실제로 발생했는지 이해할 수있었습니다. – Gabe

+0

문제 없습니다. 내가 버린 중요한 부분 - 비동기/별도의 스레드 자체에서 실행하는 것은 문제가 아니지만 다른 스레드에서 실행되는 함수는 서버 호출이므로 완료하는 데 시간이 걸립니다. 서버가 거의 즉시 응답 호출을 수신하므로 비동기 작업을 완료 할 시간이 없습니다. http 요청, 가져 오기, 쿼리, 소멸 및 다른 클라우드 기능 호출과 동일한 문제가 발생합니다. –

+1

Parse.Cloud.useMasterKey(); 구문 분석 서버 버전 2.3.0 (2016 년 12 월 7 일)에서 더 이상 사용되지 않습니다. 그 버전부터는 아무 것도하지 않습니다 (아무 것도하지 않습니다). 이제 코드에서 ACL 또는 CLP를 재정의해야하는 각 메소드에 {useMasterKey : true} 선택적 매개 변수를 삽입해야합니다. – alvaro

관련 문제