javascript - Soundcloud Javascript API SC.get() 不允许我更改函数外的变量

标签 javascript soundcloud

我似乎对 Soundcloud Javascript API 中的 SC.get 函数有疑问。我尝试将一个新项目推送到 newSounds 数组;然而,在 _.each 循环退出后,newSounds 对象仍然是一个长度为 0 的数组。此外,在 loadSounds 执行后,声音对象是未定义的。一些帮助将不胜感激,如果我需要发布更多信息来帮助解决问题,请告诉我。

loadSounds = function() {
    var newSounds = [];
    _.each(trackURLs, function(trackURL) {
      console.log(trackURL);
      SC.get(trackURL, function(track) {
        console.log(track.artwork_url);
        newSounds.push(track);
      });
    });
    return newSounds;
};

var sounds = loadSounds();

最佳答案

这种情况下的棘手之处在于 SC.get 很可能是异步的,因此当您返回 newSounds 时,它几乎肯定是空的/不完整的。最重要的是,有多个调用 SC.get 来管理。

使用延迟 object在 jQuery 中,您可以这样解决您的问题(受 http://www.tentonaxe.com/index.cfm/2011/9/22/Using-jQuerywhen-with-a-dynamic-number-of-objects 启发):

function loadSounds() {
    var newSounds = [];

    var deferredObjects = $.map(trackURLs, function (item, index) {
        var deferred = $.Deferred();

        SC.get(trackURL, function(track) {                 
            newSounds.push(track);
            deferred.resolve(track);
        });

        return deferred.promise();
    });

    $.when.apply(this, deferredObjects).then(function () {
        console.log('All done');
        console.log(newSounds);
    });

    return newSounds;
}

关于javascript - Soundcloud Javascript API SC.get() 不允许我更改函数外的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14615831/

相关文章:

javascript - 如何仅在第一次点击后显示html视频控件?

php - 包含填充数据的多选列表

javascript - 使用 soundloud API 从用户源获取所有轨道

JavaScript 覆盖方法

javascript - 根据对象的不同值过滤数组

ruby - Soundcloud Oauth 实现 : Why the hash parameters?

jquery - 像soundcloud一样在soundmanager2中添加波形

javascript - 未压缩的 SoundCloud SDK

javascript - 更好的调用 'call' redux-saga 的方法

javascript - 无法通过 SoundCloud API 获取轨道