1

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

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();
4

1 回答 1

2

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

使用 jQuery 中的deferred 对象,您可以像这样解决您的问题(灵感来自http://www.tentonaxe.com/index.cfm/2011/9/22/Using-jQuerywhen-with-a-dynamic-number-of-对象):

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;
}
于 2013-01-31T10:22:22.800 回答