Mirkom63
@Mirkom63
Я программист

Как бороться с коллбэками в nodejs?

Ребятушки спасите памагите молю!!!! Пишу приложение на electronjs. Соответственно там nodejs. Задача очень простая, но из-за коллбэков никак не могу решить и вообще не понимаю что в этой ситуации делать. Это мой первый проект на nodejs, поэтому не кидайте тряпками если спрашиваю очень простые вещи.

Задача такая:
1) Создать переменную
2) Получить значение из cookie и занести в эту переменную.
3) Если cookie нужного не существует, то получаем из базы данных значение
4) Заносим полученное значение в переменную и записываем его в куки.

Я написал такой код:
P.S. Для работы с БД использую sequelize и SQLite
P.S.S. Я понимаю что данный код не рабочий. Я просто расположил код в порядке как я вижу что он должен отрабатываться, представляя что он работает синхронно.

var active_account=false; //Создаем переменную с изначальным значением false;
		
session.defaultSession.cookies.get({url: 'http://localhost',name: 'active_account'}, (error, cookie) => {
	cookie=cookie[0];
	active_account=cookie.value; //Получаем значение куки и заносим в переменную
});

if(active_account==false){ //Если значение осталось false (то есть значение не занесли), то начинаем получать значение из бд.
	Account.findOne().then(function(account){ //Обращаемся к БД и берем первое значение
		active_account=account.email; //Заносим значение в переменую
		
		session.defaultSession.cookies.set({url: 'http://localhost', name: 'active_account', value: active_account}, (error) => {}) //Заносим значение в куки
	});
}

console.log(active_account); //PROFIT


Я понимаю, что функции можно вкладывать друг в друга. Но тут есть не прямые зависимости, которые не позволяют это просто так сделать. К тому же, у меня весь остальной код который идет ниже должен использовать переменную active_account и тогда получается весь код тоже надо в отдельный callback вставлять?

Еще я попробовал заюзать этот плагин: https://github.com/ybogdanov/node-sync
Но sequelize вообще отказывается делать запросы, если я где-то вставляю после функции sync. Может посоветуете как правильно подключить какие-то спец. плагины и как их подружить с sequelize?

Заранее большое спасибо!
  • Вопрос задан
  • 126 просмотров
Решения вопроса 2
@Patient322
async function yourModule () {
...
  const account = await Account.findOne();
  active_account=account.email;
  session.defaultSession.cookies.set({url: 'http://localhost', name: 'active_account', value: active_account}, (error) => {})
...
}
Ответ написан
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Используйте async/await и будет вам счастье.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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