JS Async / Await не работает в сочетании с forEach

Вот код, с которым я работаю (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() в конечном итоге возвращает правильный вывод, но код уже перешел. Что я делаю неправильно?

Вам не нужен асинхронный режим для второй функции

obey 30.05.2018 00:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 лет, поэтому сильно отстаю в стандартах и ​​обновлениях. Мне все это кажется нелогичным.

Adalast 30.05.2018 00:23

Да, я хотел, но так обрадовался, что забыл вернуться. Ответ был настолько быстрым после того, как я написал, что мне не разрешили его принять.

Adalast 31.05.2018 01:34

Другие вопросы по теме