功能1:获取JSON数据&店
我正在创建一个脚本,其中一个抽搐通道数组将通过JSON函数循环进行处理,然后使用“localStorage.setItem”作为临时存储进行存储。我将它们保存在名称,查看器和URL中。
功能2:排序数据
以后可以使用存储的数据显示信息,而无需再次使用功能1。
问题
sortdata函数在函数1完成之前继续触发。由于数据未定义而导致错误。在控制台显示从函数1中存储的所有信息之前,会弹出此错误。
我的代码:
$(window).load(function(){
$.when(getData()).promise().done(function(){
getStoredObj();
});
});
function getData(){
var streamArray=[];
jQuery.each (channels, function (i, channel) {
channelId = channel.id;
channelUrl = channel.url;
var promise = $.ajax({
dataType: "jsonp",
url: twitchApi + channelId,
success: 1,
}).done(function ( data ) {
if (data.stream == null) {
} else {
var displayName = data.stream.channel.display_name;
var viewerCount = data.stream.viewers;
streamArray.push({name: displayName, views: viewerCount, url: channelUrl});
localStorage.setItem("storedStreamArray", JSON.stringify(streamArray));
console.log(JSON.stringify(streamArray));
}
});
});
}
function getStoredObj () {
var retrievedObject = localStorage.getItem('storedStreamArray');
var parsedObject = JSON.parse(retrievedObject);
<sorting codes here>
}
这里的一些帮助非常感谢。 :)
答案 0 :(得分:1)
您使用$.when
的结果来调用getData
,但getData
不返回任何内容,更不用说when
可以使用的延迟了。因此,您无需等待,done
回调会立即致电getStoredObj
。
在getData
中,您需要收集ajax
次呼叫返回的所有延迟,并将其传递回来电。那看起来像是:
function getData(){
return jQuery.map (channels, function (i, channel) {
return $.ajax(...).done(function ( data ) {
// Do work
});
});
}
每次迭代返回其ajax
延迟,由map
聚合并返回给调用者。然后,您可以对结果运行when
并等待加载完成,然后再排序。