2013-12-14 14 views
0

현재 사용자 상위 목록에 대한 스냅 샷 : 나는 (내 응용 프로그램을 다시로드) 여러 시간을 실행하면간헐적 문제는이 코드 실행 문제가

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 

이것은 상위 목록 재생 목록에서만 발생하며 다른 재생 목록은 정상입니다.

무엇이 잘못 될 수 있습니까? 감사합니다.

+0

playlist1, playlist2 및 playlist3의 이름을 어떻게 지정합니까? 도움이 될지 모르지만 문제에 대해 밝히는 데 도움이 될 수 있습니다. 로그 메시지에 1,2,3을 넣을 수도 있습니다. – Thomas

+0

재생 목록이 최상위 목록이므로 이름을 바꿀 수 없습니다. Library.forCurrentUser(). toplist.uri를 사용하여 최상위 목록 uri를 얻는 방법을 보여주기 위해 서수 게시물을 업데이트했습니다. 상위 목록에서만 발생하며 다른 재생 목록도 정상적으로 작동합니다. – vdesabou

답변

0

라이브러리의 toplist 속성이 이미 재생 목록이므로 해당 URI에서 새 재생 목록 개체를 만들 필요가 없습니다. 이 스 니펫은 너와 동일하지만 토플리스트 속성을로드하고이를 사용하여 새 재생 목록을 만드는 대신 트랙을 직접 가져옵니다.

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."); 
    }); 

}); 

난 당신이 제공 한 조각을 시도했고, 마찬가지로 토마스에 난 그게 뭐가 잘못 찾을 수 없습니다. 희망이 비록 도움이됩니다.

+0

나는이 솔루션으로 문제를 재현 할 수 없습니다. 감사! – vdesabou

0

현지화 된 문제 (재생할 수 없음) 또는 비동기식 기능으로 인해 동일한 재생 목록에서 동일한 전화를 두 번 할 수 없습니다.

나는 당신이 보는 행동을 보지 않고도 (Windows v0.9.6에서) 3 번 코드를 시도했다.

재생 목록의 이름을 바꾸면 1,2,3은 나를 위해 동작을 변경하지 않았지만 두 가지 방식으로 작동합니다.

+0

함수의 비동기 성격이 모든 일반 재생 목록에 문제가되지 않기 때문에 현지화 된 문제에 대해 (OSX 10.9를 사용하고 있습니다.)이 문제는 상위 목록에서만 발생합니다. 재생 목록의 이름을 어떻게 바꿀 수 있는지 잘 모르겠습니다. 내가 생각하는 최고의 목록으로는 그렇게 할 수 없다. 원래 목록의 코드를 업데이트하여 최상위 목록의 URI를 사용하고 여러 번 동일한 코드를 실행하는 것과 관련이 없음을 분명히했습니다. 한 번의 실행으로도 문제가 발생합니다. 당신의 편에서 다시 시도해 볼 수 있습니까? 귀하의 도움을 주셔서 감사합니다 – vdesabou

+0

나는 재생 목록 변수의 이름을 바꾼 것을 의미합니다. 곧 업데이트 된 코드를 시도 할 것입니다. – Thomas

+0

제 6 회 시험에서 재 검증 할 수있었습니다. 내가 생각할 수있는 것은 성공에 대한 플래그를 설정하고 타이머를 다시 실행하여 다시 실행하는 것입니다. 또는 원래의 '3 번 실행'솔루션을 사용하여 플래그를 설정하면 첫 번째 응답 만 사용할 수 있습니다. – Thomas