У меня есть отношение N: M между двумя таблицами в MongoDB, называемыми X и Y. В обеих таблицах есть записи. Мне нужно обновить эти две таблицы с отношениями друг к другу. Я делаю это, импортируя файл с отношениями. Мне нужно сделать это синхронно в следующем логическом порядке:
- найти запись в X, чтобы получить внутренний идентификатор X-1
- найти и обновить запись в Y, чтобы указать на X-1
- обновить запись в 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);
}