Внутри асинхронной функции теряется значение

Рейтинг: 0Ответов: 0Опубликовано: 23.02.2023

Всем привет! Делаю первый серверный проект. Работаю над валидацией данных. Объясню, что я хочу сделать: внутри бд настроена валидация. Отдельно на модели пользователя, отдельно на модели заказа. Я хочу, чтобы из функции создания пользователя возвращались ошибки валидации, если они есть, потом проверялась валидность данных заказа и потом общий список ошибок отправлялся на клиент. Вот кусок кода:

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. Вот скрин консоли
скрин
Надеюсь на вашу помощь! Причастных с праздником!

Ответы

Ответов пока нет.