Вот код, с которым я работаю (IP-адрес подвергнут цензуре по очевидным причинам):
async function buildJobsView() {
let jobList = await getJobs()
Promise.all([getJobs()]).then($("#jobsPane").text(jobList))
}
async function getJobs() {
//Open API connection and submit
var url = "http://IPADDRESS:8082/api/jobs?IdOnly=true"
var xhr = new XMLHttpRequest()
xhr.open("GET", url, true)
xhr.send()
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == "200") {
return xhr.response
}
}
}
По какой-то причине переменная jobList назначается до завершения работы функции getJobs(). Функция getJobs() в конечном итоге возвращает правильный вывод, но код уже перешел. Что я делаю неправильно?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


async не преобразует автоматически код на основе обратного вызова в код на основе обещания - вы должны явно преобразовать обратный вызов в обещание и вернуть обещание всякий раз, когда вы хотите использовать его в качестве обещания.
function getJobs() {
return new Promise((resolve) => {
//Open API connection and submit
var url = "http://IPADDRESS:8082/api/jobs?IdOnly=true"
var xhr = new XMLHttpRequest()
xhr.open("GET", url, true)
xhr.send()
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == "200") {
resolve(xhr.response)
}
}
});
}
Затем getJobs вернет обещание, и вы сможете использовать его с помощью await:
const jobList = await getJobs()
О, СПАСИБО БОГУ !!!! вот чего мне не хватало. Я также все еще привыкаю ко всей структуре кодирования =>. Даже не совсем понимаю, что это значит. Я не занимался веб-разработкой около 8 лет, поэтому сильно отстаю в стандартах и обновлениях. Мне все это кажется нелогичным.
Да, я хотел, но так обрадовался, что забыл вернуться. Ответ был настолько быстрым после того, как я написал, что мне не разрешили его принять.
Вам не нужен асинхронный режим для второй функции