Задать вопрос
Dazle_PrG
@Dazle_PrG
WEB программист

Как сделать логику post запроса покупки товара, если 1 товара не хватает — отменить покупку?

В серверном файле node js post запрос: (весь post не пишу он не к чему)
const count = {};
arrkor.forEach(element => {
count[element] = (count[element] || 0) + 1;
});

console.log(count);
// выдает допустим { '2':1 '5':4 } ключ id товара, второе значение кол-во.
let keys = Object.keys(count);

// проверили весь ли товар имеется на складе для покупки. 1 цикл
keys.forEach((key, index) => { 
connect.query("SELECT * FROM tovar WHERE idt=?", [key], (err, row, fields) => {
let ostatok = row[0].count-count[key];
console.log(index+' остаток: '+ostatok);
if(ostatok<0){
    response.send("Недостаточное кол-во товара. <a href='/'>Назад</a>");
} 

});
});

// отправляем весь купленный товар в бд и завершаем удачную покупку. 2 цикл
for (let key in count) {
connect.query("SELECT * FROM tovar WHERE idt=?", [key], (err, row, fields) => {

let count2 = count[key];
let ostatok = row[0].count-count[key];
let nam = row[0].namet;
let cen = row[0].cenat;
let tovarimg = row[0].fotot;
let arrkor2 = tovarimg.split(',');

connect.query("UPDATE tovar SET count=? WHERE idt=?", [ostatok, key]);

connect.query("INSERT INTO money (idm,namem,avatarm,adressm,telm,tidm,timgm,tnamem,tcenam,tcountm,ostatok,datanow,timem) VALUES (?,?,?,?,?,?,?,?,?,?,?,NOW(),?)", [polzid, nameuser, nameavatar, adress, tel, key, arrkor2[0], nam, cen, count2, ostatok, timem]);

response.send("Вы успешно совершили покупку. С вами свяжутся в ближайшее время. <a href='/'>Назад</a>");

});

}

Проблема в том что мне нужно проверить товар заказанный пользователем на наличие это первый цикл и если там ostatok >= 0 перейти ко второму циклу в котором я добавляю товар в бд и завершаю удачную покупку.
Пробовал через условия, также обернуть 1 цикл в функцию и через return вывести истину или ложь цикла, пробовал присвоить переменной 1 цикл, также пробовал изменить или создать новый объект с остатком товара, не получается из за соединения с бд в цикле, подскажите как можно реализовать мою задумку. Если не хватает хоть 1 товара завершить покупку неудачей, а если все норм перейти ко второму циклу.
  • Вопрос задан
  • 35 просмотров
Подписаться 1 Сложный 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
тут не условие сломано — forEach не ждёт async-колбэки. Нужен mysql2/promise.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы