Внутри асинхронной функции теряется значение
Всем привет! Делаю первый серверный проект. Работаю над валидацией данных. Объясню, что я хочу сделать: внутри бд настроена валидация. Отдельно на модели пользователя, отдельно на модели заказа. Я хочу, чтобы из функции создания пользователя возвращались ошибки валидации, если они есть, потом проверялась валидность данных заказа и потом общий список ошибок отправлялся на клиент. Вот кусок кода:
async function getCreateUser(data) {
const user = await users.findOrCreate({
where: { email: `${data.email}` },
defaults: {
fullname: data.fullname,
email: data.email,
phone_number: data.phone,
town: data.town,
},
}).catch((err) => {
const errorMsgs = {};
for (let i = 0; i < err.errors.length; i += 1) {
errorMsgs[err.errors[i].message] = err.errors[i].message;
}
console.log('errors in getCreate');
console.log(errorMsgs);
return errorMsgs;
});
return user.id;
}
async function createNewOrder(data, res) {
const userId = await getCreateUser(data);
console.log('log in createOrder: ');
console.log(userId);
if (typeof userId === 'object') {
console.log(userId);
if (data.rules !== true) {
userId.rules = 'rules';
}
res.json(userId, 400);
} else {
await orders.create({
user_id: null,
summ: await getPackPrice(data.package),
rules: data.rules,
}).then(() => {
res.json(201);
}).catch((err) => {
const errorMsgs = {};
for (let i = 0; i < err.errors.length; i += 1) {
errorMsgs[i + 1] = err.errors[i].message;
}
console.log(errorMsgs);
res.json(400);
});
}
}
Если можно сделать оптимальнее, то с удовольствием выслушаю ваши предложения. Однако в чем проблема сейчас: в создании пользователя все прекрасно валидируется, но уже в создании заказа, userId в консоль выводит undefined. Вот скрин консоли
Надеюсь на вашу помощь! Причастных с праздником!
Источник: Stack Overflow на русском