Ошибка отклонения необработанного обещания: невозможно прочитать свойство 'json' неопределенного

answers.map((answer, index) => {
  answer_text = answer.answer_text;
  id = answer.id;
  return fetch(BASE_URL + url, {
    method: 'PUT',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      'Authorization': 'Token token=' + token
    },
    body: JSON.stringify({
      question: {
        answers_attributes: {
          '0': {
            answer_text: answer_text,
            id: id
          }
        }
      }
    })
  });
})

Я использовал функцию карты, чтобы на каждой карте она переходила в JSON.stringify и присваивала значения. Но я получил ошибку «Необработанный отказ от обещания TypeError: Невозможно прочитать свойство« json »неопределенного». пожалуйста, предложите мне любое решение.

Заранее спасибо.


person kalyani_jamunkar    schedule 21.12.2017    source источник


Ответы (1)


Здесь вы создаете массив обещаний выборки, нам нужно больше информации о том, как вы обрабатываете эти обещания после этого, я полагаю, вы где-то пытаетесь получить ответ от этих обещаний, используя .then(res => res.json()), но ответ вашего сервера не в формате json.

Чтобы обработать отклонение обещания выборки, вам нужно сделать следующее:

fetch(smth)
.catch(error => //handle the error e.g. console.log(error))

Чтобы увидеть, есть ли что-то не так в вашем теле запроса json, вы можете зарегистрировать его на стороне сервера или зарегистрировать его перед отправкой, вы также можете зарегистрировать ответ сервера, попробуйте это, чтобы определить, что не так:

answers.map((answer, index) => {
  answer_text = answer.answer_text;
  id = answer.id;
  const body = JSON.stringify({
      question: {
        answers_attributes: {
          '0': {
            answer_text: answer_text,
            id: id
          } }
      }
    })
console.log('Json body request :', body);
  return fetch(BASE_URL + url, {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      'Authorization': 'Token token=' + token
    },
    body
  }).then(res => {
    console.log('server response :', res);
    return res;
  }).catch(err => console.log('Fetch error :', err));
 })

Я рекомендую использовать приложение, такое как Postman, для проверки ответов от вашего API-сервера (проще и быстрее отлаживать запрос/ ответы от API)

Изменить: я также думаю, что вы хотите сделать запрос POST вместо PUT.

person Dyo    schedule 21.12.2017
comment
Он не работает для метода POST, поскольку он создает полные данные для ответов. Длина времени, я имею в виду, что все данные проходят внутри цикла. - person kalyani_jamunkar; 10.01.2018