Периодическая проблема со снимком треков для текущего списка пользователей

У меня проблема при выполнении этого кода:

require(['$api/models','$api/library#Library'], function(models,Library) {

// THIS ONLY HAPPEN FOR TOP LIST
var uri=Library.forCurrentUser().toplist.uri;
// IF YOU USE ANY OTHER PLAYLIST IT WORKS FINE
//  var uri="spotify:user:vdesabou:playlist:0xy2zExFmPzJZsY0X0bCC5";

var playlist = models.Playlist.fromURI(uri);
playlist.load('tracks').done(function() {
    console.log("loaded 1");
playlist.tracks.snapshot().done(function(snapshot) {
    console.log("snapshot length 1 " + snapshot.length);

    snapshot.loadAll('name')
       .done(function(snap_tracks) { console.log("loaded tracks length 1 " + snap_tracks.length);    })
       .fail(function() { console.log("loadAll failed"); });
    }).fail(function() { console.log("snapshot failed"); });

}).fail(function() { console.log("playlist load tracks failed"); });

});

Если я выполняю несколько раз (перезагружая свое приложение), я не получаю результаты примерно 1 раз из 3

Когда это не работает:

loaded 1

Когда это работает, я получаю:

loaded 1
snapshot length 1 20 
loaded tracks length 1 20 

Это происходит только для списка воспроизведения верхнего списка, любой другой список воспроизведения в порядке.

Что может быть не так? Спасибо

2 ответа

Решение

Свойство библиотеки toplist уже является списком воспроизведения, поэтому вам не нужно создавать новый объект списка воспроизведения из его URI. Этот фрагмент делает то же самое, что и ваш, но загружает свойство toplist и использует его для непосредственного получения дорожек вместо создания нового списка воспроизведения.

require(['$api/models','$api/library#Library'], function(models,Library) {

  var library = Library.forCurrentUser();
  library.load("toplist").done(function() {
    var toplist = library.toplist;

    toplist.load('tracks').done(function() {
      console.log("loaded 1");
      toplist.tracks.snapshot().done(function(snapshot) {
        console.log("snapshot length 1 " + snapshot.length);

        snapshot.loadAll('name')
          .done(function(snap_tracks) { console.log("loaded tracks length 1 " + snap_tracks.length);    })
          .fail(function() { console.log("loadAll failed"); });

      }).fail(function() { console.log("snapshot failed"); });

    }).fail(function() { console.log("playlist load tracks failed"); });

  }).fail(function() {
    console.log("Could not load toplist.");
  });

});

Я попробовал предоставленный вами фрагмент, и, как и Томас, я не смог найти в этом ничего плохого. Надеюсь, это поможет.

Либо это локализованная проблема (я не могу воспроизвести), либо из-за асинхронного характера функций, вы не можете сделать один и тот же вызов дважды в одном и том же списке воспроизведения.

Я пробовал ваш код 3 раза (в Windows v0.9.6), не видя поведения, которое вы видите.

Переименование плейлиста 1,2,3 не изменило мне поведение, работает в обе стороны.

Другие вопросы по тегам