Показать сообщение отдельно
  #1 (permalink)  
Старый 18.08.2021, 12:12
Новичок на форуме
Отправить личное сообщение для zloy_ej Посмотреть профиль Найти все сообщения от zloy_ej
 
Регистрация: 18.08.2021
Сообщений: 4

async в анонимной функции
Добрый день, возник вопрос, который я не могу решить своими силами. Есть скрипт:
'use strict';
var btn = $('.form_submit');
function AJAX() {
    return new Promise(function(resolve, reject){
        $.ajax({
        type: "POST",
        url: "/get_building",
        data: $('form').serialize(),
        type: 'POST',
        success: function(response) {
            var json = jQuery.parseJSON(response);  //Прочитать ответ сервера
            var resp_list = json.resp; //массив с ключем par_buld_resp (из функции get_building main.py)
            console.log(`Это resp_list ${resp_list}`);
            resolve(resp_list);
        },
        error: function(error) {
          console.log(error);
          reject(error);
        }
    });
    })
}

async function checkForm() {
    let promise = await AJAX();
    var title = $('.add_building_form').val();
    console.log(`это промис ${promise}`);
    console.log(`это title ${title}`);
    return(false);
}

$(document).ready(function(){
    btn.click(function(){
        let answer =  checkForm();
        console.log(`Это answer ${answer}`);
        if(answer==false) {
            
            return false;
        }
        else
            return false;
        //{form.submit();}
    })
})


который при клике по кнопке запускает функцию checkForm. Та в свою очередь запускает другую функцию, которая через AJAX обращается к бд и проверяет, есть ли уже запись в БД с таким названием. checkForm принимает промис от функции AJAX в котором либо old (то есть запись уже есть), либо new - если записи нет, а так же проверяет введенную строку (пока не реализовал) и возвращает промис (пока только false). В функциях расставлены логи, вот вывод:
Это answer [object Promise]
Это resp_list Old
это промис Old
это title 123
Из всего этого становится понятно, что основная анонимная функция, которая ждет нажатия на кнопку не ждет пока checkForm выполнится. Вопрос: как сделать анонимную функцию асинхронной?
если я делаю так:
btn.click(async function(){
        let answer =  await checkForm();
        ....

выскакивает ошибка интерпретатора uncaught exception: Object
Ответить с цитированием