我似乎对 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/