2013-08-05 3 views
0

클라우드 코드의 javascript SDK를 통해 구문 분석을 쿼리하는 데 문제가 있습니다. "Stack"및 "StackUser"라는 클래스가 있습니다. "스택"을 쿼리 할 때까지 모든 것이 잘 작동합니다. 나는 "StackUser"를 쿼리하는 데 사용한 것과 정확히 같은 구문을 사용하고 있습니다. 나는 get 메소드를 사용하여 id를 가진 스택 객체를 얻는다. 나는 stackpointer.id이 실제로 정확한 ID 인 콘솔에 로그인하여 확인했습니다.구문 분석 쿼리가 클래스 이름을 등록하지 않습니다.

그러나이 함수는 결코 queryStack.get(stackPointer.id { 행을 입력하지 않습니다. stackPointer 객체가 올바른 정보를 가지고 있으며 stackPointer.id과 같은 것을 확인했습니다. 나는 또한 제어 흐름이 for 루프에 들어간다는 것을 확인했다. 그러나 위의 행은 입력되지 않습니다.

도와주세요. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 감사합니다.

Parse.Cloud.define("getStacksForUser", function(request, response) { 

    console.log(request); 
    console.log(response); 

    var StackUser = Parse.Object.extend("StackUser"); 
    var queryStackUser = new Parse.Query(StackUser); 

    queryStackUser.equalTo("user", request.user); 
    console.log("BEFORE FIND") 

    queryStackUser.find({ 
     success: function(results) { 
      console.log("DO WE HAVE RESULTS"); 
      console.log(results); 
      var Stack = Parse.Object.extend("Stack"); 
      var queryStack = new Parse.Query(Stack); 

      console.log("BEFORE LOOP"); 
      var stackarray = new Array(); 
      for (var i = 0; i < results.length; ++i) { 
       var stackPointer = results[i].get("stack"); 
       queryStack.get(stackPointer.id, { 
        success: function(stack) { 
         console.log("STACK") 
         console.log(stack); 
         stackarray.push(stack); 
        }, 
        error: function(object, error) { 
         console.log("ERROR!!!"); 
         response.error("retrieving a stack failed"); 
        } 
       }); 

      } 
      console.log("RESULT TIME"); 
      console.log(stackarray); 
      response.success(stackarray); 
     }, 
     error: function() { 
      response.error("retrieving stacks failed"); 
     } 
    }); 
}); 

답변

1

response.success()은 클라이언트에게 응답을 반환합니다. 복수 비동기 get() 메서드를 사용하는 루프 외부에서 이것을 호출하므로 이러한 get() 쿼리에 실행 기회가 주어지지 않은 것은 놀라운 일이 아닙니다.

1

약속을 사용하면 훨씬 행복해집니다. 아래의 코드는 방금 시각적으로 확인되었지만 원하는대로 가깝습니다. 나는 실제로 그것을 사용하지 않았다. 나는 그것에 대해 혼란 스러울 수있다. 내부 오류는 마지막 오류 절에도 전파되어야합니다.

- 밥

Parse.Cloud.define("getStacksForUser", function(request, response) { 

    console.log(request); 
    console.log(response); 

    var StackUser = Parse.Object.extend("StackUser"); 
    var queryStackUser = new Parse.Query(StackUser); 

    queryStackUser.equalTo("user", request.user); 
    console.log("BEFORE FIND") 
    var stackarray = new Array(); 

    var promise0 = queryStackUser.find(); 
    promise1 = promise0.then(function(results){ 
     console.log("DO WE HAVE RESULTS"); 
     console.log(results); 
     var Stack = Parse.Object.extend("Stack"); 
     var queryStack = new Parse.Query(Stack); 

     console.log("BEFORE LOOP"); 
     var promiseArray = new Array(); 
     for (var i = 0; i < results.length; ++i) { 
      promiseArray[i] = results[i].get("stack"); 
      promiseArray[i].then(function(result){ 
       console.log("STACK") 
       console.log(stack); 
       stackarray.push(stack); 
      }, function(error){ 
       console.log("ERROR!!!"); 
       response.error("retrieving a stack failed"); 
      }); 
     }; 
     return Parse.Promise.when(promiseArray); 
    }); 
    promise1.then(function(result){ 
     response.success(); 
    }, function(error){ 
     response.error(error); 
    }); 
}); 
관련 문제