Правильно ли я понял суть промисов?
В общем была задача передать в шаблон user. После авторизации в сессию попадает id юзера, но для передачи полных данных в шаблон мне нужно найти в бд юзера по id и вывести render в callback-e, но в таком случае если сессия отсутствует то я получаю ошибку на клиенте и приходится делать 2 render-a. Позже понадобилось помимо user-a вывести категории и получается, что для того чтоб мне передать данные в шаблон мне нужно создать несколько callback-ов. Вариант очевидно невыносимый и я решил попробовать промисы, но до этого я совершенно не понимал где и как их использовать.
Было:
const renderIndex = (req, res, next) => {
if(req.session.passport){
userModel.findById(req.session.passport.user, (err, result)=>{
try {
user = {
username: result.username,
password: result.password
}
res.render('index', {
title: 'Title',
user: user,
config: config,
})
} catch (e) {
next(e)
}
})
} else {
res.render('index', {
title: 'Title',
user: null,
config: config,
})
}
}
Стало:
async function renderIndex (req, res, next) {
let categories = await categoriesList()
let user = await getUser(req, res)
console.log(user)
res.render('index', {
title: 'Title',
user: user,
config: config,
categories: categories
})
}
async function getUser(req, res) {
if(req.session.passport) {
return new Promise((resolve,reject) => {
userModel.findById(req.session.passport.user, (err, result) => {
if (err) {
return reject(err)
}
return resolve(result)
})
})
}
}
Прошу оценить код и указать на недочеты.