2013-04-24 6 views
0

현재 Spotify 앱을 새로운 1.0 버전의 API로 마이그레이션하려고합니다.Spotify 미리보기 API 검색 트랙 및 앨범

검색에 문제가 있습니다. 검색 문자열을 사용하여 카탈로그를 검색하고 검색 결과에서 모든 트랙 정보, 아티스트 이름 및 앨범 이름을 다시 가져 오려고합니다. 그러나 검색 결과에 앨범 이름 (URI : s 만 포함)이 포함되어 있지 않은 것으로 보입니다.

나중에 모든 결과 트랙의 모든 앨범 이름을 비동기 적으로로드해야합니까? 나는 이것을 피하고 싶다.

나는 API 1.0 일부 데이터에서이

var search = Search.search(searchString); 
search.tracks.snapshot().done(function(snapshot) { 
    var results = snapshot.toArray(); 
    // no album names in the results tracks 
}).fail(function() { 
    console.error('Error retrieving snapshot'); 
}); 

답변

1

처럼 검색하고 자동으로 검색되지 않습니다. 이는 이상적으로 필요한 데이터 만 가져와 데이터 트래픽을 줄이고 성능을 향상시키는 것을 의미합니다. 단점은 비동기 방식으로 데이터를 가져 와서 트랙 배열과 앨범 이름을 직접 작성해야한다는 것입니다.

각 트랙에 대해 앨범 이름을 가져 오려는 경우. 이것은 당신이 어떻게 할 것입니다 :

var maxTracks = 15; 
var search = Search.search(searchString); 
search.tracks.snapshot(0, maxTracks).done(function(snapshot) { 
    snapshot.toArray().forEach(function(result) { 
    result.album.load('name').done(function(album) { 
     // here you have access to the album.name attribute 
    }); 
    }); 
}).fail(function() { 
    console.error('Error retrieving snapshot'); 
}); 

그 접근 방식의 문제가 있음을 당신은 트랙이 표시되는 것과 다른 순서로 데이터입니다. 트랙과 같은 순서를 유지합니다 Promise의 배열을 사용하여

var maxTracks = 15; 
var search = Search.search(searchString); 
search.tracks.snapshot(0, maxTracks).done(function(snapshot) { 
    var promises = []; 
    snapshot.toArray().forEach(function(result) { 
    promises.push(result.album.load('name')); 
    }); 
    models.Promise.join(promises) 
    .done(function(albums) { console.log('Loaded all albums.', albums); }) 
    .fail(function(albums) { console.log('Failed to load at least one album.', albums); }); 
}).fail(function() { 
    console.error('Error retrieving snapshot'); 
}); 

: 당신이 순서를 유지해야 할 경우에는 Promise 객체를 사용할 수 있습니다.

+0

두 번째 버전은 내 앱에서 잘 작동하는 것으로 보입니다. 약속 사용 방법에 대해 확신하지 못했습니다. – faximan

관련 문제