Вы вызываете LoadRolesDropdown () после LoadApplicationUsers (), но внутри LoadApplicationUsers () есть ajax-вызов, который выполняется асинхронно, занимает время.
Переместите LoadRolesDropdown внутри LoadApplicationUsers и вызовите его после цикла each ().
function LoadApplicationUsers(appID) {
$('#grdUsers').DataTable().clear();
$('#grdUsers').DataTable().destroy();
GetUserRoles().done(function (users) {
$.each(users, function (index, user) {
if (user.applicationID == appID) {
$("#grdUsers tbody").append(`
<tr>
<td class="text-center"><button type="button" class="btn btn-sm btn-danger deleteuser"> X </button></td>
<td class="d-none userID">${ user.userID}</td>
<td class="d-none userID">${ user.roleID}</td>
<td>${ user.username}</td>
<td><select class="roles"></select></td>
<td>${ user.roleName}</td>
</tr>
`);
}
});
$('#grdUsers').DataTable({
"paging": false,
});
LoadRolesDropdown(appID);
});
}
Winpdb независим от платформы графический отладчик Python GPL с поддержкой удаленной отладки по сети, несколько потоков, модификация пространства имен, встроили отладку, зашифрованную коммуникацию и до 20 раз быстрее, чем pdb.
Функции:
(источник: winpdb.org )
Можно проверить отладчик Python pdb, который включен в стандартную библиотеку: http://docs.python.org/library/pdb.html
Я рекомендовал бы pydb и ipython для интерактивной отладки.
Оба имеют скринкасты в наличии в showmedo.com
Комодо IDE (не свободное Редактирование Комодо ) идет с отладчиком. Я не использовал его более чем за год, но это было хорошо тогда (v 3, IIRC).