В основном приложении, над которым я работал и с которым гуру Stack Overflow были спасателями, я решил избежать некоторых асинхронных осложнений, которые я видел, разделив ветвь SortArray моей основной подпрограммы на ее собственная функция. Тестирование, которое показывает отличные результаты непосредственно перед тем, как функция возвращает эти результаты.
Способ, который позволяет мне сэкономить на обработке, состоит в том, что я могу отсортировать массив до того, как Я отправлю его в основную функцию обработки. Таким образом, все массивы обрабатываются одинаково во всей функции ProcessArray.
В приведенном ниже примере кода я показываю текущую структуру, которая является моей интерпретацией данного совета (совсем недавно jfriend00). Я делаю два вызова $ .getJSON, второй в предложении success первого, и перед тем, как завершить первый вызов getJSON (в этот момент я протестировал и проверил массивы, созданные во время обработки, не показанной здесь), я вызываю SortArray в одном из массивов, затем передайте его подпрограмме, которая отправляет результат в ProcessArray.
Несмотря на успех кода SortArray внутри самого себя , массив, который входит в ProcessArray с помощью этого средства, помечается как «неопределенный». Если это не более проблем с асинхронной обработкой, я предполагаю, что это проблема со ссылкой на массив. Но я не знаю, как это решить.
function buildTree(centralID) {
$(document).ready(function(){
$.getJSON('MurakiMaida.json', function(data) {
$.each(data.person, function(i, xdata) {
...create a small set of arrays
}); //end of first $.each() routine
$.getJSON('MurakiMaida.json', function(data) {
$.each(data.person, function(i, xdata) {
...use an array just created to create another
}); //end of second each()
}); //end of second getJSON
$("#spchildren").html(ProcessArray(SortArray(childIDs, true), centralID, false));
}); //end of first getJSON
}); //document.ready
}