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管理する複数の呼び出しがあります。

deferred jQuery でオブジェクトを使用すると、次のように問題を解決できます ( 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 に答える