Отправка формы прекращается при возникновении ошибки внутри функции

#javascript #html #jquery #forms #fetch

#javascript #HTML #jquery #формы #выборка

Вопрос:

Я создаю пользовательскую форму, в которую я добавил несколько console.log() инструкций для быстрой отладки. но я заметил, что если внутри console.log() например: Uncaught TypeError: Cannot read property 'formatted_address' of undefined есть ошибка, то остальная часть функции перестает выполняться. Что для меня странно.

Вот код:

 function submitted(e) {
  console.log(typeof autocomplete.getPlace());
 console.log("Location: ", autocomplete.getPlace().formatted_address); //this can result in undefined
  const selectedCat = category.options[category.selectedIndex].value;//this can result in undefined if 
                                                                        nothing is selected

//----If any of the above throws an undefined error than the code below won't execute----

  const data = {
    name: bizName,
    email: bizEmail,
    location:
      typeof autocomplete.getPlace() !== "undefined"
        ? autocomplete.getPlace().formatted_address
        : bizAddress,
    owner: {
      firstName: ownerFname,
      lastName: ownerLname,
    },
    phone: phone,
    website: bizUrl,
    category: selectedCat,
    logo: "https://s3.amazonaws.com/uifaces/faces/twitter/picard102/128.jpg",
  };

  console.log(data);

  postData("/business/create", { answer: 42 }).then((data) => {
    console.log(data);
    //check for errors from server validation
    if (data.errors) {
      alert(data.errors[0].msg);
    }
  });

  e.preventDefault();

  console.log();
  console.log(e);
}
  

Как я могу предотвратить это? Или что-то еще вызывает остановку функции?
Заранее спасибо

Комментарии:

1. Это нормально, когда javascript обнаруживает ошибку, он останавливается. » Как я могу предотвратить это? » Исправьте ошибку 🙂

2. @FluffyKitten хммм, вот почему я сказал, что использую его для отладки … лол

3. Ошибка в консоли не имеет ничего общего с использованием console.log для отладки. Всякий раз, когда javascript обнаруживает ошибку, он отображает сообщение об ошибке в консоли, независимо от отладки.

Ответ №1:

Значения в вашем console.log вычисляются в этой строке. Если в этой строке обнаружена ошибка, она выдаст ошибку.

Это сделано специально. Это необработанная ошибка.

Решение: обработайте ошибку.

Вы можете использовать блок try / catch.

Вы также можете инициализировать значения перед их регистрацией, получая доступ к значениям только в том случае, если объект не является неопределенным…

Комментарии:

1. «Вы также можете инициализировать значения перед их регистрацией, получая доступ к значениям, только если объект не определен …» как вы это делаете?

2.Допустим, вы обращаетесь b из a . Вы ожидаете, что эти данные будут доступны: a = { b: 'some value' } . Если вы попытаетесь получить доступ b , но по какой-то причине он не определен, вы получите сообщение об ошибке. Но если вы сначала проверите, существует ли a , вы можете справиться с тем, что она не определена. if (a) { // do something with a.b } else { // something is wrong! }

Ответ №2:

Если произойдет ошибка, то выполнение программы остановится. если вы хотите обработать ошибку, используйте try / catch

try Инструкция позволяет вам определить блок кода, который будет проверяться на наличие ошибок во время его выполнения.

catch Инструкция позволяет определить блок кода, который будет выполнен, если ошибка возникает в блоке try.

Операторы JavaScript try и catch приходят парами:

 try {
  Block of code to try
}
catch(err) {
  Block of code to handle errors
}