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