执行此代码时遇到问题:
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次中的结果
什么时候不起作用:
loaded 1
当它工作时,我得到:
loaded 1
snapshot length 1 20
loaded tracks length 1 20
这仅适用于热门列表播放列表,任何其他播放列表都可以。
可能有什么不对? 感谢
答案 0 :(得分:0)
要么是本地化问题(我无法复制),要么由于函数的异步性质,您无法在同一个播放列表上进行两次相同的调用。
我已经尝试了3次代码(在Windows v0.9.6上)而没有看到您所看到的行为。
重命名播放列表1,2,3并没有改变我的行为,两种方式都有效。
答案 1 :(得分:0)
Library的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.");
});
});
我确实尝试了你提供的代码片段,和托马斯一样,我找不到任何错误。希望这会有所帮助。