@Grep1

Как дождаться конца выполнения цикла?

После запроса к бд я получаю объект, после этого мне нужно выполнить еще несколько запросов к бд и в конечном итоге сделать пуш в массив.
Пытаюсь написать промис т.к после всего этого мне нужно отправить данные с сервера но сейчас у меня выводится пустой массив. Помогите, как правильно написать промис или хотя бы как это написать под await
.then(lef=>{
									let link = [];
									let arr_link = new Promise(function(resolve,reject){
										for(lefts of lef){
								            models.db.l_d.findOne({where: {id: lefts.l_d.id}})
								            	.then(ld=>{
								            		ld.getMains()
								            			.then(ma=>{
								            				for(m of ma){
								            					let arr_data = {
								            						data: data.name,
								            						dataId: data.Id,
								            						left: lefts.name,
								            						leftId: lefts.id,
								            						main: m.name,
								            						mainId: m.id,
								            						linkId: m.ld_m.id
								            					};
								            					link.push(arr_data);
								            				}
								            			})
								            			.catch(err=>console.log(err));
								            	})
								            	.catch(err=>console.log(err));
								        }
								        resolve(link);
									});
									arr_link.then(function(result){
										console.log(result);
									});
								})
  • Вопрос задан
  • 318 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
.then(lefts => {
    return Promise.all(
        lefts.map(left => models.db.l_d.findOne({where: {id: left.l_d.id}})
            .then(ld => ld.getMains())
        )
    ).then(mains => mains.flatMap((main, i) => main.map(m => ({
        data: data.name,
        dataId: data.Id,
        left: lefts[i].name,
        leftId: lefts[i].id,
        main: m.name,
        mainId: m.id,
        linkId: m.ld_m.id
    }))));
}).then(
    result => console.log(result),
    err => console.log(err)
)
Советую получше изучить промисы
Ну и давать нормальные имена переменным не лишнее
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы