2014-11-25 2 views
0

n00b 여기의 질문. 함수 안에 변수가 있고 다른 함수에서 변수를 사용하고 싶습니다. 사전에 난 그냥 그것을 할 수없는 I 이유, 아마도 몇 가지 작은 문제를 내가 놓친 거지를 들어 ...자바 스크립트 - 함수 외부의 객체 사용

function getIDs() { 
Parse.initialize("mycode", "mycode"); 
    var recipeObject = Parse.Object.extend("mycode"); 
    var query = new Parse.Query(recipeObject); 
    query.notEqualTo("objectId", "mycode"); 
    query.find({ 
    success: function(results) { 
     for (var i = 0; i < results.length; i++) { 
     var object = results[i]; 
     var objectIdent = object.id; 
     var objectText = object.get('recipe_text'); 
     var getObject = query.equalTo("objectId", objectIdent); 
     console.log(object.id); 
    } 
    }, 
    error: function(object, error) { 
    alert("fail"); 
    } 
    }); 


    } 
//Here I am trying to acces the object.id object and just can't get it.. 
     console.log(object.id); 

감사합니다!

Parse.initialize("mycode", "mycode"); 
    var recipeObject = Parse.Object.extend("mycode"); 
    var query = new Parse.Query(recipeObject); 
    query.notEqualTo("objectId", "mycode"); 
    query.find({ 
    success: function(results) { 
     for (var i = 0; i < results.length; i++) { 
     var object = results[i]; 
     var objectIdent = object.id; 
     var objectText = object.get('recipe_text'); 
     var getObject = query.equalTo("objectId", objectIdent); 

     window.object = object; // make object available at a window scope 
     console.log(object.id); 
    } 
    }, 

답변

1

그것은 scope의 문제입니다, 당신은이 작업을 수행 할 수 있습니다.

var 키워드는 {}에 특정한 범위를 만듭니다.

+0

이 함수는 함수 밖의 변수에 액세스하려고 시도하는 동안 함수 내에 있으므로 obviosuly 가능합니다. 감사합니다. –

1

100 % 확실하지만 당신은 var 키워드없이 시도 할 수 있습니다 : (: console.log(object.id);는 정상 범위 수준에 마지막 줄을 가정)

+0

아니, unfortunatelly 도움이되지 않았다. 감사! –

0

이 게시물은 내 함수 내에서 변수에 액세스 할 수 있도록 다른 함수를 만들어야한다는 것을 보여주었습니다. How do you reference a custom object outside of the function it was created in with JavaScript? 그래서 내가 가서 이런 식 추가 :

function getIDs() { 
Parse.initialize("mycode", "mycode"); 
var recipeObject = Parse.Object.extend("mycode"); 
var query = new Parse.Query(recipeObject); 
query.notEqualTo("objectId", "mycode"); 
query.find({ 
success: function(results) { 
    for (var i = 0; i < results.length; i++) { 
    var object = results[i]; 
    var objectIdent = object.id; 
    var objectText = object.get('recipe_text'); 
    var getObject = query.equalTo("objectId", objectIdent); 
    function internalShit(){ 
    console.log(objectIdent); 
    } 
    internalShit(); 
} 
}, 
} 
}, 
error: function(object, error) { 
alert("fail"); 
} 
}); 
} 
0

이 IMO, 초기 코드 두 가지 문제가 있습니다를. 위에서 지적한 범위 문제 중 하나입니다. 다른 하나는 "비동기"문제입니다. Parse를 호출하면 비동기 호출입니다. 이는 요청을 보내고 나머지 코드를 계속 실행한다는 것을 의미합니다. 응답이 언제 되돌아오고 "성공"코드가 실행되는지에 대한 보장은 없습니다.

아래 예에서 query.find는 요청을 보내고 console.log를 다음 행으로 실행합니다. "success : ..."코드는 응답을 얻을 때까지 실행되지 않습니다. 응답은 console.log 다음에 올 것입니다. 결과적으로 consol.log는 "not"를 출력합니다.

var done = "not"; 

... Parse Query Initialization... 

query.find({ 
success: function(results) { 
    done = "done!"; 
} ...error handling etc 

console.log(done); //will most likely log "not" 

응답 후 코드의 실행을 보장하는 유일한 방법은 성공 또는 오류 블록에 넣는 것입니다.

행운을 빈다.

+0

답변 해 주셔서 감사합니다. 다른 방법으로이 문제를 해결했지만 해결책을 또한 확인합니다! –

관련 문제