#javascript #node.js #promise #async-await #es6-promise
#javascript #node.js #обещание #асинхронный-ожидание #es6-обещание
Вопрос:
Итак, приведенный ниже код покажет вам, что я пытаюсь прочитать athelets и departments из файла.
У отдела есть список спортсменов, поэтому сначала я хочу сопоставить каждого спортсмена этого отдела и назначить этот список спортсменов отделу. Журналы консоли показывают следующее: представьте, что в каждом отделе по 5 спортсменов.
Итак, я хочу console.log("TEST_1")
, чтобы печатать 5 раз и console.log("TEST_2")
печатать 1 раз, и все это для каждого отдела.
var array1 = [];
await Promise.all(departaments.map(async dp => {
array1 = [];
await Promise.all(athletes.map(async at => {
var athlete = new Athlete();
athlete.name = at.name;
athlete.weight = at.weight;
array1.push(athlete._id);
athlete.save();
console.log("TEST_1");
})).then(() => {
var dep = new Department();
dep.name = dp.name;
Object.assign(dep.athletes, array1);
dep.save();
console.log("TEST2");
});
})).then(async () => {
............not relevant..............
}
Но что делает этот код: печатает все «TEST_1» и только затем «TEST_2», поэтому он размещает последние 5 спортсменов во всех отделах.
Я попытался изменить async
и await
, но это не сработало…
Не могли бы вы мне помочь?
Ответ №1:
Я не уверен, что понимаю, что на самом деле делает код. Также я думаю, вы пропустили, что использование «await» освобождает вас от использования .then() и .catch() от обещаний. Но я бы предположил, что вам придется изменить его на:
var array1 = [];
await Promise.all(departaments.map(async dp => {
array1 = [];
await Promise.all(athletes.map(async at => {
var athlete = new Athlete();
athlete.name = at.name;
athlete.weight = at.weight;
await athlete.save();
// maybe wait till the ORM's .save() operation provides an id?
array1.push(athlete._id);
console.log("TEST_1");
}));
var dep = new Department();
dep.name = dp.name;
Object.assign(dep.athletes, array1);
await dep.save();
console.log("TEST2");
})).then(async () => {
............not relevant..............
}
Комментарии:
1. Спасибо за ваш ответ, но эта альтернатива теперь помещает всех спортсменов в каждый отдел, в файле, который я читаю, по 5 спортсменов в каждом отделе.
2. Есть только переменные «департаменты» и «спортсмены». Вы должны расширить свой первоначальный вопрос и показать нам, как выглядят переменные / файлы. Это зависит от того, как вы перебираете свои данные и когда создаете пользователей / отделы и назначаете, кто к кому.