Проблема возникает из-за того, что вы пытаетесь получить возвращаемый результат асинхронно, но в действительности его асинхронно
см. Правку в вашем коде здесь:
//Returns all assistants to specific event
function getAssistants(id) {
let uri = "https://api.myjson.com/bins/uqndk";
$.getJSON(uri, function(data) {
let html = "";
$.each(data.events[id].assistants, function(index, value) {
if (value == 'undefined' || value == null) {
html = '<li class="collection-item">No hay asistentes registrados.</li>';
} else {
html += '<li class="collection-item">' + value.name + '</li>';
}
});
//console.log(html);
$("#assistants").append(html);
});
}
getAssistants(1);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="assistants" class="collection">
<!-- <li class="collection-item">John Smith</li> -->
</ul>
В этом решении я изменяю ваш код, чтобы поместить результат в блок get ... так, чтобы он работал ...
Другое решение: Вы также можете решить эту проблему, используя async / await в ES6, обещание ... и т.д., проверьте этот пример: Пример