2014-08-30 4 views
-1

문제점을 알 수 없습니다. 빈 배열을 계속 반환합니다. 즉, movieIds는 항상 비어 있습니다. 대신자바 스크립트 함수에서 반환 값을 가져올 수 없습니다.

movieIds.push(results[i].get("movie")); 

그것은 문제를 해결할 수

movieIds.add(results[i].get("movie")); 

사용해보십시오 사용

function getMoviesInCinema(theCinema){ 
    var cinema = theCinema; 
    var query = new Parse.Query("showing"); 
    var movieIds = []; 

    query.equalTo("cinema", { 
     __type: "Pointer", 
     className: "Cinema", 
     objectId: cinema 
    }); 
    query.find().then(function(results) { 
     if(results.length > 0){ 
      for (var i = 0; i < results.length; i++) { 
       movieIds.push(results[i].get("movie")); 
      } 

     } 
     else{ 
      console.log("Could be an error"); 
     } 
    }); 
    return movieIds; 

} 

답변

-3

.

+0

그것은 – user3679294

+0

은 u는 "결과를 인쇄 시도 할 수 있습니다 작동하지 않았다 [I을 ] .get ("movie") "... – Prashant2329

+1

이것은 OP의 원래 코드가 실제 문제와 관련이 없기 때문에 더욱 정확합니다. '.push'는 배열 끝에 뭔가를 추가하는 올바른 방법입니다 ('[] .add'는 존재하지 않습니다). –

2

함수에서 돌아 왔을 때 쿼리가 아직 완료되지 않았기 때문입니다. 당신은 당신의 기능을 대신 콜백을해야한다 :

function getMoviesInCinema(theCinema, callback){ 
    var cinema = theCinema; 
    var query = new Parse.Query("showing"); 

    query.equalTo("cinema", { 
     __type: "Pointer", 
     className: "Cinema", 
     objectId: cinema 
    }); 
    query.find().then(function(results) { 
     if(results.length > 0){ 
      callback(results); 
     } 
     else{ 
      console.log("Could be an error"); 
     } 
    }); 
} 

는 다음과 같은 호출 : 여기

getMoviesInCinema(theCinema, function(movieIds) { 

    console.log(movieIds); 

}); 
+0

나는 쿼리 결과를 그대로 varable로 필요로한다. var VariableName = resultofquery – user3679294

+0

@ user3679294 : 적어도 배열을 유용하게 사용할 수는 없습니다. 다시 James는 말했듯이, 당신의 함수는 정보가 이용 가능하기 전에 **를 반환합니다. –

0

문제는 query.find() 실행 비동기입니다. 즉, 함수가 query.find 전에 then 콜백으로 호출되기 전에 반환됩니다.

query.find이 비동기이기 때문에 함수 이 ID를 직접 반환 할 수 없습니다. 배열을 반환 할 수는 있지만 배열은 비어있는 상태로 시작됩니다. 대신 Promise를 제공하거나 콜백을 허용해야합니다.

콜백 사용 옵션을 사용하고있는 lib에는, 그래서 여기에 약속 무엇 확실하지 :

function getMoviesInCinema(theCinema, callback){ 
// Receive the callback --------------^ 
    var cinema = theCinema; 
    var query = new Parse.Query("showing"); 
    var movieIds = []; 

    query.equalTo("cinema", { 
     __type: "Pointer", 
     className: "Cinema", 
     objectId: cinema 
    }); 
    query.find().then(function(results) { 
     if(results.length > 0){ 
      for (var i = 0; i < results.length; i++) { 
       movieIds.push(results[i].get("movie")); 
      } 

     } 
     else{ 
      console.log("Could be an error"); 
     } 
     if (callback) {    // <===== 
      callback(movieIds);  // <===== Call it 
     }       // <===== 
    }); 
} 

사용법 :

getMoviesInCinema(42, function(movieIds) { 
    // Use movieIds here 
}); 
관련 문제