Перенаправление внутри асинхронной функции

У меня есть функция для создания сессии оформления заказа Stripe.com:

@csrf_exempt
def create_checkout_session(request):
    if request.method == 'GET':
        domain_url = 'https://example.com/'
        stripe.api_key = settings.STRIPE_SECRET_KEY
        try:
            order = request.user.profile.order_set.get(ordered=False)
            all_in_stock = True
            for orderitem in order.orderitem_set.all():
                if orderitem.item.in_stock >= orderitem.quantity:
                    pass
                else:
                    all_in_stock = False
                    break
            if all_in_stock:
                line_items = []
                for orderitem in order.orderitem_set.all():
                    line_item = {
                        'name': orderitem.item.item_name,
                        'quantity': orderitem.quantity,
                        'currency': 'usd',
                        'amount': int(orderitem.item.price * 100),
                    }
                    line_items.append(line_item)
                    orderitem.item.in_stock -= orderitem.quantity
                    orderitem.item.save(update_fields=['in_stock'])
                if order.shipping_address.state == 'IL':
                    line_item = {
                        'name': 'Sales tax',
                        'quantity': 1,
                        'currency': 'usd',
                        'amount': int(order.get_sales_tax() * 100),
                    }
                    line_items.append(line_item)
                checkout_session = stripe.checkout.Session.create(
                    client_reference_id=request.user.profile.id,
                    success_url=domain_url +
                    'store/success?session_id={CHECKOUT_SESSION_ID}',
                    cancel_url=domain_url + 'store/cancelled/',
                    payment_method_types=['card'],
                    mode='payment',
                    line_items=line_items,
                    customer_email=request.user.email,
                    expires_at=int(time.time() + 3600),
                )
                return JsonResponse({'sessionId': checkout_session['id']})
            else:
                messages.error(request, "Not enough items in stock to fulfill the order")
                return redirect("store:order-summary")
        except Exception as e:
            return JsonResponse({'error': str(e)})

Выполняется с помощью этого сценария:

fetch("/store/config/")
    .then((result) => { return result.json(); })
    .then((data) => {
      const stripe = Stripe(data.publicKey);
      document.querySelector("#stripeSubmitBtn").addEventListener("click", () => {
        fetch("/store/create-checkout-session/")
        .then((result) => { return result.json(); })
        .then((data) => {
          console.log(data);
          return stripe.redirectToCheckout({sessionId: data.sessionId})
        })
        .then((res) => {
          console.log(res);
        });
      });
    });

Я хочу добавить функциональность для проверки того, что все товары все еще есть на складе, и если нет, то прервать сеанс. Я новичок в JS. Я понимаю, что простой редирект не работает, потому что функция выполняется асинхронно, но я не знаю, как сделать это правильно. Как правильно это реализовать?

Вернуться на верх