Я пытаюсь поймать ошибку, когда определенный ключ не существует в json из API, в данном случае imageLinks.thumbnail.
Это то, что я написал до сих пор, но я все еще получаю TypeError: Cannot read property 'thumbnail' of 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;
};
Помощь будет высоко оценена.
Ваше здоровье
Вы уверены, что получаете эту ошибку в этой строке? Где-нибудь еще вы ссылаетесь на это? NB: этот вопрос не имеет ничего общего с получением JSON из API. Вы имеете дело с объектами JavaScript, а не с JSON.
Если results.imageLinks не определено, он никогда не выполнит блок else.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать оператор В
if ('imageLinks' in results)
Использовать имеет собственное свойство ()
(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.info(cover);
})();Ваш вопрос кажется немного двусмысленным.
Я постараюсь ответить, основываясь на том, что я понял из вашего кода.
Кажется, у вас есть объект с именем 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 вы хотите проверить ключ в объекте, который вы можете напрямую написать if (results['imageLinks']).
Это очень мало информации для отладки. Не могли бы вы добавить, что такое
resultsи что оно содержит? и я не понимаю, почему вы используетеlet coverв 3 разных местах, потому что каждый раз, когда вы это делаете, создается новая переменная, если вы хотите использовать ту же переменную, просто определите ее один раз и используйте.