Многократное ожидание при итерации массива в NodeJS - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть отношение N: M между двумя таблицами в MongoDB, называемыми X и Y. В обеих таблицах есть записи. Мне нужно обновить эти две таблицы с отношениями друг к другу. Я делаю это, импортируя файл с отношениями. Мне нужно сделать это синхронно в следующем логическом порядке:

  1. найти запись в X, чтобы получить внутренний идентификатор X-1
  2. найти и обновить запись в Y, чтобы указать на X-1
  3. обновить запись в X, указав Y1

Три операции дадут мне отношение N: N между X1 и Y1.

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

Вот мой псевдокод:

let relations = JSON.parse(data);
productsRelations.map(async (relation) => {
  let x1 = await findX(x1); // find x1 based on info in file
  let y1 = await findAndUpdateY(y1, x1); // find and update y1 with relation to x1
  await updateX(x1, y1); // update x1 with relation to y1
});

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

РЕДАКТИРОВАТЬ: Ответ от @ Mike'Pomax'Kamermans был действительно проблемой. Я изменил это на это, чтобы получить ожидаемый результат:

const updateRelations = async (relation) => {
  let x1 = await findX(x1);
  let y1 = await findAndUpdateY(y1, x1);
}
let relations = JSON.parse(data);
for (const relation of relations) {
  await updateRelations(relation);
}
...