2014-04-30 6 views
0

다음. 구조, 나는 다음 이미지 개체를 반환하는 데 문제가 있습니다.자바 스크립트 약속 및 그 매개 변수

이미지를 반환하는 지점에서 초기 범위를 벗어 났기 때문에 더 이상 사용할 수 없습니다.

여기에 올바른 방법을 제공 할 수있는 방법이 있습니까? 아니면 여기에서 코딩을 사용하고 있습니까?

.then(function(image) {   


    image.data().then(function(result) { 
     var base64 = result.toString("base64"); 
     var largeImage = new Parse.File("l.jpg", { base64: base64 }); 
     largeImage.save().then(function(result,image) { 
      post.set('largeImageUrl',result.url()); 
      return image; /// <-- undefined. How can access the image object here? 
     }); 
    }); 



    }).then(function(image) { 
+2

** largeImage.save(). then (...) ** ** return **이 필요하다는 것을 잊지 마십시오. – Bergi

+2

'함수 (결과, 이미지)'를'함수 (결과)'로 변경하십시오. –

답변

4

원본 image 변수가 범위를 벗어나지 않습니다. 변수가 다른 함수 내에서 정의 되더라도 동일한 블록 내에 정의 된 모든 함수에서 변수를 볼 수 있습니다. 즉, 변수의 범위는 정의 된 함수입니다. 다양한 함수에서 같은 이름의 변수가있는 경우 내부 범위 함수는 해당 범위에 대한 새 참조를 가지며 더 이상 외부 함수의 값을 참조하지 않습니다.

그러나, 원래 image 변수는 가장 안쪽의 범위 image라는 또 다른 변수는 largeImage.save().then()에 전달하는 function(result,image)에 의해 그림자가된다. 외부 변수 image에 대한 참조가 여전히 필요한 경우 내부 변수 image의 이름을 다른 것으로 변경해야합니다.

변수가 undefined이기 때문에 복사 + 붙여 넣기에서 남은 것으로 보이며 처음에는 function(result,image)의 매개 변수 목록에 속하지 않을 수도 있습니다.

+0

@sweetamylase 귀하의 편집 지점이 있습니까? 삽입 한 문장은 이미 말한 내용을 반복하여 대답을 반복합니다. 명확하지 않으며 더 나은 설명이 필요하다고 판단되면 자신의 답변을 올릴 수 있습니다. – lanzz

+0

귀하의 답변은 훌륭합니다. 변수 범위에 대한 설명을 확장하여 OP가 어떻게 작동하는지 이해하도록했습니다. 그러나이 질문에 대한 내 답변을 게시하는 것이 좋다고 생각하지 않았습니다. – sweetamylase

+0

범위를 설명해 주셔서 감사합니다. 이제 작동합니다. 또한 image 매개 변수를 제거하는 대신 'image.data()'및 'largeImage.save()'앞에 'return'을 추가해야했습니다. – Eduscho

관련 문제