Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<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>
 

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