@ura2rist

Как запушить массив в объект по условию?

Пишу условие, если == true то выполнить следующие действия, если нет то просто записать объект, в итоге в консоль выводится menuOtd, но наполнен он только в тех местах в которых срабатывает else, т.е часть после if выполняется но не пушится в общий массив. Я выводил переменную val в консоль но там все ок, т.е код выполнен но он не пушится. В чем дело?
pnd.findOne({where: {id: 1}})
			.then(pnds => {
				pnds.getOtds()
				.then(otds =>{
					var menuOtd = [];
					for(ot of otds){
						var val = {};
						if(ot.pndOtd.sub == 'true'){
							otd.findOne({where: {id: ot.id}})
								.then(ots=>{
									ots.getSubOtds()
										.then(sub => {
											var q =[];
											for(a of sub){
												//console.log('Отделения ' + ots.name + '!Под ' +a.name)
												q.push(a.name);
											}
											val = {
												name: ots.name,
												sub: 'true',
												pndId: 1,
												subm: q
											}
											menuOtd.push(val);
										})
								})
						}else{
							val = {
								name: ot.name,
								sub: 'false'
							}
							menuOtd.push(val);
						}
					}

					console.log(menuOtd)
					response.render('index',{
						pndli: pndli,
						pnd: info,
						table: table,
						otd: menuOtd
					});
				})
			});
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 3
hzzzzl
@hzzzzl
попробуй так, если я правильно понял структуру
.then(sub => {
/*
                      var q =[];
                      for(a of sub){
                        //console.log('Отделения ' + ots.name + '!Под ' +a.name)
                        q.push(a.name);
                      }
*/
                      val = {
                        name: ots.name,
                        sub: 'true',
                        pndId: 1,
                        subm: sub.map(s => s.name)
                      }
                      menuOtd.push(val);
                    })
Ответ написан
@andreysuha
Что то знаю
У Вас внутри if ассихронный код, а внутри else нет, вот и получается что вывод в консоль срабатывает до того как выполнится код внутри if
Ответ написан
IgorPI
@IgorPI
Коллега, ваша ошибка заключается в том, что внутри цикла, код асинхронный.
Вывод в консоль произойдёт раньше чем вы ожидаете.

Вот тут я неаккуратно изобразил анимацию, но суть верна и явно отражает вашу проблему.
Курсором я показываю очерёдность выполнения кода.
Следите за курсором.

5e0045b9d103a652034367.gif
Итог:
На момент вывода в консоль menuOtd пуст
Тип ошибки: логическая
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 15:11
500 руб./в час
30 апр. 2024, в 15:11
5000 руб./за проект
30 апр. 2024, в 15:05
5000 руб./за проект