0

現在、Spotify アプリを新しい 1.0 バージョンの API に移行しようとしています。

検索に問題があります。検索文字列でカタログを検索し、検索結果からすべてのトラック情報、アーティスト名、アルバム名を取得したいと考えています。ただし、検索結果にアルバム名 (URI:s のみ) が含まれていないようです。

結果として得られるすべてのトラックのすべてのアルバム名を後で非同期的にロードする必要がありますか? できればこれは避けたい。

こんな感じで探しています

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');
});
4

1 に答える 1

1

API 1.0 では、一部のデータは自動的に取得されません。これは、理想的には、必要なデータのみをフェッチして、データ トラフィックを減らし、パフォーマンスを向上させることを意味します。欠点は、トラックの配列とアルバム名を自分で作成し、非同期でデータを取得する必要があることです。

取得するトラックごとに、そのアルバムの名前を取得します。これはあなたがそれを行う方法です:

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と、トラックと同じ順序が維持されます。

于 2013-04-25T13:25:13.287 に答える