#javascript #node.js #json #error-handling
#javascript #node.js #json #обработка ошибок
Вопрос:
Я пытаюсь перехватить ошибку, когда определенный ключ не существует в json из API, в данном случае imageLinks.thumbnail.
Это то, что я написал до сих пор, но я все еще получаю TypeError: не удается прочитать свойство ‘thumbnail’ для undefined.
let cover;
if(results.imageLinks === undefined){
let cover = "http://actar.com/wp-content/uploads/2015/12/nocover.jpg";
} else {
let cover = results.imageLinks.thumbnail;
};
Помощь была бы очень признательна.
Приветствия
Комментарии:
1. Это очень мало информации для отладки, не возражаете ли вы добавить, что есть
results
и что оно содержит? и я не понимаю, почему вы используетеlet cover
в 3 разных местах, потому что каждый раз, когда вы это делаете, создается новая переменная, если вы хотите использовать ту же переменную, просто определите ее один раз и используйте.2. Вы уверены, что получаете эту ошибку в этой строке? Где-нибудь еще вы ссылаетесь на него? ПРИМЕЧАНИЕ: этот вопрос имеет мало общего с получением JSON из API. Вы имеете дело с объектами JavaScript, а не с JSON.
3. Если
results.imageLinks
значение не определено, он никогда не выполнитelse
блок.
Ответ №1:
Вы можете использовать оператор IN
if('imageLinks' in results)
Ответ №2:
Используйте hasOwnProperty()
(function() {
let cover;
const result = {
imageLinks: {}
};
if (!Object.hasOwnProperty.call(result, 'imageLinks')) {
return;
}
if (Object.hasOwnProperty.call(result.imageLinks, 'thumbnail')) {
cover = results.imageLinks.thumbnail;
} else {
cover = "http://actar.com/wp-content/uploads/2015/12/nocover.jpg";
}
console.log(cover);
})();
Ответ №3:
Ваш вопрос кажется немного двусмысленным.
Я постараюсь ответить на основе того, что я понимаю из вашего кода.
Похоже, у вас есть объект с именем results, который может иметь или не иметь свойство imageLinks.
Поэтому вам нужно установить флажок «если результаты имеют свойство imageLinks, назначить обложку results.imageLinks.thumbnail, в противном случае назначить «http://actar.com/wp-content/uploads/2015/12/nocover.jpg«
let cover = results['imageLinks']['thumbnail'] ? results['imageLinks']['thumbnail'] : "http://actar.com/wp-content/uploads/2015/12/nocover.jpg";
Пожалуйста, обратите внимание, что проверка, которую я установил, является более полной. Это пройдет, только если структура объекта {'results' : 'imageLinks': {'thumbnail' : 'some value'}}
Если вы хотите проверить только ‘imageLinks’, замените результаты ['imageLinks']['thumbnail']
на results['imageLinks']
В JS in вы хотите проверить наличие ключа в объекте, который вы можете напрямую записать if(results['imageLinks'])
.