2012-08-08 18 views
0

我正在構建Spotify應用程序,並且希望擁有精選專輯。我的JSON數據指定了專輯,所以我用簡單的for循環遍歷它們。然而,與軌道數據,這是可以直接通過track.data.album.name,專輯數據需要通過回調來提取:從Spotify應用程序中的回調中獲取專輯數據

var a = models.Album.fromURI(appData.Albums[i].uri, function(album) { 
     console.log("Album data: ", album.name); 
}); 

可正常工作,與顯示專輯名稱的控制檯,但我找不到任何的例子你如何在回調函數之外提供這些數據。 a.uri似乎是唯一的作品:

var a = models.Album.fromURI(appData.Albums[i].uri, function(album) { 
    //console.log("Album data: ", album.name); 
}); 
console.log("Album data: ", a.uri); 

有人能指出我在正確的方向嗎?如果這是一個Spotify應用程序問題,或者我應該在回調中使用閉包或匿名函數,我有點困惑。

回答

0

你從models.Album.fromURI()回來的事情是是已傳遞給你的回調相同的對象:

var a = models.Album.fromURI("spotify:album:1KtFTJnuQbMDpKJRHQonYZ", function(album) { 
    console.log(a === album); 
    // ^Logs "true" 
}); 

uri屬性是立即可用,因爲它已經知道 - 你給的URI對象從...開始。其餘元數據異步加載,一旦回調被觸發,將在原始對象a中可用。在回調中,您可能需要調用另一個函數來實際更新您的URI或任何您需要執行的操作。

+0

謝謝你的澄清,我認爲我的問題是不理解如何正確地觸發循環內的回調 - 因爲我認爲需要一個閉包。但是你的回答完美無缺。 – Komejo 2012-08-08 21:11:40

+0

是的,這就是發生了什麼 - 'models.Album.fromURI()'需要被閉包調用。這裏的第二個代碼示例的修改版本效果很好:https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures – Komejo 2012-08-08 22:07:56

相關問題