Простая выборка производит два вызова API

#javascript

Вопрос:

Я программирую веб-сервис для библиотеки. Часть API сервера завершена и работает отлично (я проверил это с помощью wget), но теперь я бы написал простую веб-страницу, на которой fetch API и выполняет (или работает так) два вызова, доступных в API ( /api/books/lend и /api/books/giveback .

  1. /api/books/lend Раньше я просил одолжить мне книгу. Он извлекается с помощью метода POST и внутри тела есть:
    • Хэш: Хранит хэш книги, которая была предоставлена,
    • Имя: Имя пользователя книги,
    • Электронная почта: Электронная почта пользователя книги,
    • Мобильный: Номер телефона пользователя книги,
    • Дата: Текущая дата.
  2. /api/books/giveback Используется для возврата одолженной книги.Он извлекается с помощью метода POST внутри тела.:
    • Букхаш: Книга, которую одолжили и хотели вернуть.

И это функция, которая вызывает API. Эта функция вызывается onlclick в html-файле флажка. Идея такова: если она проверена (представлена логическим: lended ), это означает, что книга предоставлена, и мы должны /api/books/giveback ее использовать, с другой стороны, если она не проверена, это означает, что книга бесплатна для использования, и мы хотим позвонить /api/books/lend .

 async function open_dialog_lend (obj_hash, lended, cite) {
    // lended == true: To give back a [obj_hash] book.
    if (lended) { 
        if (window.confirm("¿Devolver?")) {
            if (getCookie("connected-api") == "")
                await login_cookie();

            await fetch (GIVEBACK, {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ BookHash: obj_hash })
            });
        }
    }
    // lended == false: To lend a [obj_hash] book.
    if (!lended) window.location.href = "#lend_data";
    document.getElementById("lend-btn").addEventListener("click", async () => {
        if (getCookie("connected-api") == "")
            await login_cookie();

        Date.prototype.addDays = function(days) {
            let date = new Date(this.valueOf());
            date.setDate(date.getDate()   days);
            return date;
        }
        const date_str = (today) => today.getFullYear() '-' (today.getMonth() 1) '-' today.getDate();
        
        const Body = {
            Hash: obj_hash,
            Name: document.getElementById("lend-name").value,
            Email: document.getElementById("lend-email").value,
            Mobile: document.getElementById("lend-mobile").value,
            Date: date_str(new Date)
        };
        
        const res = await fetch(LEND, {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify(Body)
        });

        Email.send({
            Host: "smtp.gmail.com",
            Username : "xxx@gmail.com",
            Password : "*******",
            To : Body.Email,
            From : "xxx@gmail.com",
            Subject : "some subject",
            Body : Body.Name   " se te ha concedido en carácter de prestamo el Libro: "   cite  
                ".nTe recordamos que debes regresarlo antes de 15 días ("   date_str(new Date().addDays(15))   "), cuando lo hagas déjalo sobre una mesa (No guardar en los estantes). También recordá que debes destildar el libro en https://example.com/"
        }).then(
            message => console.log("Mail sent")
        );
    });
}

 

Приведенный выше код работает, кроме того, не вызывает никаких ошибок, но… Это работает неправильно. Когда функция вызывается сначала, установите книгу как предоставленную (внутри API), она создает запись базы данных для новой предоставленной (внутри API), но в дальнейшем она возвращает значение «Предоставлено» в значение «ложь», а в записи предоставленного набора возвращает значение «истина». Да, точно так, как упоминалось в начале, похоже, что он выполняет два вызова.