2017-11-29 2 views
3

나는 Spotify 앱을 만들고 있습니다. 로그인하여 내 토큰을 얻을 수 있습니다. 내 문제는 메서드 외부의 변수에 액세스 할 수 없다는 것입니다. 당신이 볼 수 있듯이promise`.then` 메쏘드 밖의 변수에 어떻게 접근 할 수 있습니까?

function getUser() { 
    if ($localStorage.token == undefined) { 
    throw alert("Not logged in"); 
    } else { 
    Spotify.getCurrentUser().then(function(data) { 
     var names = JSON.stringify(data.data.display_name); 
     console.log(names) 
    }) 
    } 
}; 

내가 이름을 console.logged 내가 콘솔의 오른쪽 값을받을 수 있나요 :이 경우 "getCurrentUser"

이 내 방법입니다. 그러나 함수를 호출 할 경우에만 작동합니다. getUser() 이름 변수가 반환 되어도 undefined이 반환됩니다.

그 변수는 $scope입니다.

+0

,하지만 당신은 또한'반환을 필요로 Spotify.getCurrentUser() ...'그러면 약속을 반환합니다 (그리고 그때부터 반환 값) – Danny

답변

5

getUser()은 아무 것도 반환하지 않습니다. 당신은 Spotify.getCurrentUser()에서 약속을 반환해야하고 당신은 외부 함수에 의해 반환되는 것을 names을 반환 할 때.

function getUser() { 

    if ($localStorage.token == undefined) { 
     throw alert("Not logged in"); 
    } 
    else { 
     return Spotify.getCurrentUser().then(function(data) { 
      var names = JSON.stringify(data.data.display_name); 
      console.log(names) 
      return names; 
     }) 
    } 
} 

은 위의 getUser()를 호출 할 때 undefined을 얻는 이유를 대답하지만 마지막 작업 할 경우 당신은 또한 당신이 인 getUser에서 얻을 값을 사용하는 방법을 변경하려면 결과 - 그것은 약속을 반환 객체가 아니라 끝이 코드는 약속의 then 메소드를 호출하고 싶은, 그래서 약속이 해결됩니다 때, 후있어 결과 : 당신이 반환 names``이 같은데요

getUser()      // this returns a promise... 
    .then(function(names) {  // `names` is the value resolved by the promise... 
     $scope.names = names;  // and you can now add it to your $scope 
    }); 
+0

죄송합니다.이 기능이 새로 생겼습니다. 작동했지만 $$ 상태로 시작하는 객체를 얻었습니까? 포함 된 데이터에 어떻게 액세스합니까? –

+0

도와 주실 수 있나요? –

+0

'getUsers()'에서 얻은 약속을 처리 할 코드를 추가했습니다. 이전에 주석에 링크 된 다른 답변보다 훨씬 깨끗하다고 ​​생각합니다. – Danny

관련 문제