Похоже, что все три ваших getJSON()
вызова независимы (не зависят друг от друга, если $campus
не является побочным эффектом первого buildMenu()
). Это должно означать, что вы можете выполнять их все одновременно (параллельно), собирать все результаты и создавать меню сразу:
Promise.all([
$.getJSON(apiURL),
$.getJSON(apiURL + '/colleges/' + $campus.val()),
$.getJSON(apiURL + '/campus-year-terms/' + $campus.val())
]).then(function([campusData, collegeData, termData]) {
buildMenu('campus', campusdata);
buildMenu('college', collegedata);
buildMenu('term', termdata);
// other code here after all menus are done
}).catch(function(err) {
// handle error here
});
Или, если вам нужна поддержка браузера, не включающая деструктуризацию массива:
Promise.all([
$.getJSON(apiURL),
$.getJSON(apiURL + '/colleges/' + $campus.val()),
$.getJSON(apiURL + '/campus-year-terms/' + $campus.val())
]).then(function(results) {
buildMenu('campus', results[0]);
buildMenu('college', results[1]);
buildMenu('term', results[2]);
// other code here after all menus are done
}).catch(function(err) {
// handle error here
});
Если по какой-то причине $campus.val()
зависит от первого вызова API, вам придется изменить его на следующее:
$.getJSON(apiURL).then(function(campusdata) {
buildMenu('campus', campusdata);
return Promise.all([
$.getJSON(apiURL + '/colleges/' + $campus.val()),
$.getJSON(apiURL + '/campus-year-terms/' + $campus.val())
]).then(function(results) {
buildMenu('college', results[0]);
buildMenu('term', results[1]);
// other code here after all menus are done
});
}).catch(function(err) {
// handle error here
});