Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Soundcloud Javascript API SC.get()不允许我更改函数外部的变量_Javascript_Soundcloud - Fatal编程技术网

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

Soundcloud Javascript API SC.get()不允许我更改函数外部的变量,javascript,soundcloud,Javascript,Soundcloud,我似乎对SoundCloudJavaScript API中的SC.get函数有问题。我尝试将一个新项目推送到newSounds数组;但是,每次循环退出后,newSounds对象仍然是一个长度为0的数组。此外,loadSounds执行后,sounds对象未定义。一些帮助将非常感谢,如果我需要张贴更多的帮助解决问题,让我知道 loadSounds = function() { var newSounds = []; _.each(trackURLs, function(trackUR

我似乎对SoundCloudJavaScript API中的SC.get函数有问题。我尝试将一个新项目推送到newSounds数组;但是,每次循环退出后,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();

在这种情况下,棘手的事情是
SC.get
很可能是异步的,因此当您返回
newSounds
时,它几乎肯定是空的/不完整的。除此之外,还有多个调用
SC.get
进行管理

使用jQuery中的
延迟
,您可以像这样解决您的问题(受以下启发):

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;
}