【问题标题】:Getting album data from callback in Spotify App从 Spotify App 中的回调中获取专辑数据
【发布时间】:2012-08-08 14:45:49
【问题描述】:

我正在构建一个 Spotify 应用,并且想要制作精选专辑。我的 JSON 数据指定了专辑,因此我使用简单的 for 循环遍历它们。但是,与通过track.data.album.name直接获取的曲目数据不同,专辑数据需要通过回调来提取:

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 应用程序问题,或者我是否应该在回调中使用闭包或匿名函数,我有点困惑。

【问题讨论】:

    标签: javascript spotify


    【解决方案1】:

    你从models.Album.fromURI() 得到的东西是在回调中传递给你的同一个对象:

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

    uri 属性可以立即使用,因为它是已知的——您将 URI 提供给对象以开始。其余元数据是异步加载的,一旦触发回调,就会在原始a 对象中可用。在回调中,您可能想要调用另一个函数来实际更新您的 URI 或您接下来需要做的任何事情。

    【讨论】:

    • 感谢您的澄清,我认为我的问题是不了解如何正确触发循环内的回调 - 因为我认为需要关闭。但是您的回答完美地解决了问题。
    • 是的,就是这样——models.Album.fromURI() 需要被闭包调用。这里第二个代码示例的修改版本效果很好:developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures
    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多