Как обслужить ошибку, если нет конкретного ключа, но он должен быть - PullRequest
2 голосов
/ 04 июня 2019

Я использую fetch на https://www.googleapis.com/books/v1/volumes?q=wiedzmin. Если вы перейдете по этой ссылке, вы увидите, что это не какой-либо volumeInfo.authors в 9-м объекте (от строки 545 до 602). Это дает мне ошибку:

Uncaught (in promise) TypeError: Cannot read property 'join' of undefined

Я хотел бы создать логику, например, "если есть ошибка, возвращаемая" Не найдено значение ", и выполнение кода будет продолжено.

мой кусок кода:

fetch("https://www.googleapis.com/books/v1/volumes?q=wiedzmin")
    .then(resp => resp.json())
    .then(x => {

      console.log('AUTHORS: ')
        for(let i=0; i <= x.items.length - 1; i++){
          console.log(x.items[i].volumeInfo.authors.join(', '))
          }

      })

1 Ответ

4 голосов
/ 04 июня 2019

Вы можете попробовать проверить x.items[i].volumeInfo.authors, если это undefined, тогда пустой массив по умолчанию позволяет ошибке не произойти:

fetch("https://www.googleapis.com/books/v1/volumes?q=wiedzmin")
    .then(resp => resp.json())
    .then(x => {
      console.log('AUTHORS: ')
      for(let i=0; i <= x.items.length - 1; i++){
          console.log((x.items[i].volumeInfo.authors || []).join(', '))
      }
    })

Или, если вы хотите игнорировать x.items[i].volumeInfo.authors, это undefined, Вывсе еще можно использовать, если:

fetch("https://www.googleapis.com/books/v1/volumes?q=wiedzmin")
    .then(resp => resp.json())
    .then(x => {
      console.log('AUTHORS: ')
      for(let i=0; i <= x.items.length - 1; i++){
        if(x.items[i].volumeInfo.authors) {
          console.log(x.items[i].volumeInfo.authors.join(', '))
        } else {
          console.log('No value found')
        }
      }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...