2012-08-08 2 views
0

Spotify 앱을 만들고 있는데 기능 앨범을 갖고 싶습니다. 내 JSON 데이터는 앨범을 지정하므로 간단한 for 루프로 반복합니다. 그러나 track.data.album.name를 통해 제공됩니다 트랙 데이터는 달리, 앨범 데이터는 콜백을 통해 추출 할 필요가있다 :Spotify 앱에서 콜백으로 앨범 데이터 가져 오기

var a = models.Album.fromURI(appData.Albums[i].uri, function(album) { 
     console.log("Album data: ", album.name); 
}); 

예상대로이 앨범 이름을 표시하는 콘솔, 작동하지만 난 어떤 예제를 찾을 수 없습니다 그 데이터를 콜백 함수 외부에서 사용 가능하게 만드는 방법에 대해 설명합니다. a.uri 만 작동하는 것 같습니다.

var a = models.Album.fromURI(appData.Albums[i].uri, function(album) { 
    //console.log("Album data: ", album.name); 
}); 
console.log("Album data: ", a.uri); 

누군가 올바른 방향으로 나를 가리킬 수 있습니까? Spotify App 문제이거나 콜백 내부에서 클로저 또는 익명 함수를 사용해야하는 경우 다소 혼란 스럽습니다. 당신의 객체에 URI를 제공 - 이미 알려져 있기 때문에

uri 속성은 즉시 사용할 수
var a = models.Album.fromURI("spotify:album:1KtFTJnuQbMDpKJRHQonYZ", function(album) { 
    console.log(a === album); 
    // ^Logs "true" 
}); 

가 :

답변

0

다시 models.Album.fromURI()에서 얻을 것은 콜백에서 당신에게 전달되는 동일한 개체 수있다 ~으로 시작하십시오. 나머지 메타 데이터는 비동기 적으로로드되며 콜백이 시작되면 원래 a 개체에서 사용할 수 있습니다. 콜백에서 URI를 실제로 업데이트하는 다른 함수를 호출하거나 다음에해야 할 일을 호출 할 수 있습니다.

+0

설명해 주셔서 감사합니다. 내 문제는 루프 내부에서 콜백을 올바르게 수행하는 방법을 이해하지 못한다고 생각합니다. 클로저가 필요하다고 생각합니다. 하지만 당신의 대답은 모든 것을 완벽하게 정리했습니다. – Komejo

+0

네, 그런 일이 일어났습니다.'모델 .Album.fromURI()'는 클로저에 의해 호출되어야했습니다. 두 번째 코드 예제의 수정 된 버전은 다음과 같이 훌륭하게 작동합니다. https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures – Komejo

관련 문제