【发布时间】:2019-08-20 22:13:50
【问题描述】:
在我的代码中,我处理需要按顺序解析的多个 JSON 请求。
let allRadio_data, allHistory_data, iTunes_data;
$.when(parseRadioList())
.then(function(list) {
radioList_data = list;
return $.when(
parseEachRadioData(radioList_data),
ParseEachHistoryData(radioList_data)
);
})
.then(function() {
console.log(allRadio_data);
console.log(allHistory_data);
return $.when(_parseiTunes());
})
.then(function(iTunesInfo) {
iTunes_data = iTunesInfo;
return _cacheOptions();
})
function _cacheOptions() {
// FINAL function
}
/////////
function parseRadioList() {
return $.getJSON("https://api.myjson.com/bins/xiyvr");
}
function _parseiTunes() {
return $.getJSON("https://itunes.apple.com/search?term=jackson&limit=10&callback=?")
}
function parseEachRadioData(radioList) {
allRadio_data = [];
$.each(radioList, function(index, radio) {
$.when($.getJSON(radio.url + "/stats?sid=" + radio.stream_id + "&json=1&callback=?"))
.then(function(data) {
allRadio_data.push(data);
});
})
}
function ParseEachHistoryData(radioList) {
allHistory_data = [];
$.each(radioList, function(index, radio) {
$.when($.getJSON(radio.url + "/played?sid=" + radio.stream_id + "&type=json&callback=?"))
.then(function(data) {
allHistory_data.push(data);
});
})
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
现在代码正在运行,但是我在 console.log(allRadio_data); 执行的地方是空的。但是,如果我使用settimeout() 将其延迟一秒钟,则数据已完成。这意味着then() 没有按时运行。
这是我正在寻找的结构:
- JSON 文件 1 已解析。
parseRadioList() - JSON1 是一个包含多个 JSON URL 条目的数组。
- 遍历 JSON1 数组中的 URL,并为每个 URL 执行
getJSON。parseEachRadioData(radioList_data)&ParseEachHistoryData(radioList_data) - 将每个 JSON 的数据推送到一个通用 Array 中。
- 一旦完成,解析 JSON2
_parseiTunes()
任何想法如何使此代码以正确的结构运行。
提前致谢。
【问题讨论】:
标签: javascript jquery json promise getjson