Как использовать async / await, когда мне нужно встроить в forEach () в JavaScript - PullRequest
0 голосов
/ 06 декабря 2018

Я знаю, что это не сработает так, как я это написал, и я не вижу ответов, которые решают проблему для меня.Код слишком длинный для размещения здесь, но я включил ссылку на гист

https://gist.github.com/dhawkinson/41211d067ea91e0b7a5823067d2e39fe

Моя проблема заключается в следующем:

Я получаю список идентификаторов дляJSON-файлы, которые должны быть прочитаны и преобразованы в строки в таблицах с несколькими SQL.Список поступает из другого json-файла в виде массива идентификаторов файлов, которые нужно прочитать и преобразовать.

По требованию в таблицах SQL не должно быть строк с избыточными данными.Идентификаторы SQL генерируются автоматически.В API есть 3 категории сущностей:

  1. Учащиеся - студенты, проходящие курсы
  2. Курсы - Предлагаемые ученикам возможности обучения (у них есть дети, представляющие детали)
  3. Результаты - Пересечение ученика, проходящего курс, на определенную дату (у них есть дети, представляющие детали)

И ученики, и курсы могут появляться в результатах несколько раз, но только один разна конкретную дату.Но и ученики, и курс могут появляться только один раз в таблицах учеников и курсов соответственно (без избыточности).

Мои исходные данные - 4 результата json, что соответствует 4 идентификаторам в моем списке.Представление высокого уровня выглядит следующим образом (формат: Course_TimeStamp.json)

  • id = 5sM5YLnnNMN_1525523468000.json (ученик = daffy@duck.com)
  • id = 5sM5YLnnNMN_152son6868ученик = yogi@bear.com)
  • id = 6tN6ZMooONO_1530730049000.json (ученик = daffy@duck.com)
  • id = 6tN6ZMooONO_1541011649000.json (ученик = foghorn@leghorn.com) * 10*

Когда я анализирую и записываю данные, я получаю:

  • 3 строки ученика (как и ожидалось)
  • 3 строки курса (1 избыточно, недопустимо)
  • 4 Строки результатов (как и ожидалось)
  • Дети как для курсов, так и для результатов пишутся как положено.

Как решить эту проблему, учитываямои ограничения?Я подозреваю, что проблема избыточности может появиться в таблице Learners при некоторых неясных обстоятельствах, хотя это еще не так.Я использую одинаковый подход для всех таблиц.

Помощь приветствуется.Извините за многословие.

1 Ответ

0 голосов
/ 06 декабря 2018

Вы не можете использовать async / await с forEach

REASON: Поскольку мы не можем использовать await внутри синхронной функции.Как видите, «processArray» - это асинхронная функция.Но анонимная функция, которую мы используем для forEach, является синхронной. DO READ

questions.forEach((question) => {
    processCourseDetails(jsonData, question);
});

Вы можете использовать простой цикл , например:

for(question of questions) {
    await processCourseDetails(jsonData, question);
}

Вы можете создать пользовательскую функцию для работы подобно forEach с async / await, DO READ

...