Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>By using <a href="https://developer.spotify.com/docs/apps/api/1.0/api-models-promise.html" rel="nofollow">Promises</a> you can delay the rendering of the list until you have successfully composed the temporary list with your tracks. Also, in order to prevent the addition of repeated tracks on reload, assign a unique name to your temporary playlist.</p> <pre><code>require([ '$api/models', '$views/list#List', '$api/toplists#Toplist' ], function (models, List, Toplist) { 'use strict'; // Build playlist function buildList(trackURIArray) { var arr = trackURIArray; models.Playlist .createTemporary("myTempList_" + new Date().getTime()) .done(function (playlist) { playlist.load("tracks").done(function () { playlist.tracks.add.apply(playlist.tracks, arr).done(function () { // Create list var list = List.forCollection(playlist, { style: 'rounded' }); $('#playlistContainer').appendChild(list.node); list.init(); }); }); }); } // Get top track function getTopTrack(artist, num) { var promise = new models.Promise(); var artistTopList = Toplist.forArtist(artist); artistTopList.tracks.snapshot(0, num).done(function (snapshot) { snapshot.loadAll().done(function (tracks) { promise.setDone(tracks[0]); }).fail(function (f) { promise.setFail(f); }); }); return promise; } // Get Related function getRelated(artist_uri) { models.Artist .fromURI(artist_uri) .load('related') .done(function (artist) { artist.related.snapshot().done(function (snapshot) { snapshot.loadAll().done(function (artists) { var promises = []; for (var i = 0; i &lt; artists.length; i++) { var promise = getTopTrack(artists[i], 1); promises.push(promise); } models.Promise.join(promises) .done(function (tracks) { console.log('Loaded all tracks', tracks); }) .fail(function (tracks) { console.error('Failed to load at least one track.', tracks); }) .always(function (tracks) { // filter out results from failed promises buildList(tracks.filter(function(t) { return t !== undefined; })); }); }); }); }); } getRelated('spotify:artist:2VAvhf61GgLYmC6C8anyX1'); }); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload