#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
}