JavaScript Fetch API, можете ли вы получить доступ к заголовкам, а также к JSON в обратном вызове `.then`?

Мне нужно сделать запрос POST, а затем, в зависимости от ответа, а также заголовков, мне нужно обновить сохраненное состояние, я знаю, что заголовки доступны через response.header.get('SOME-KEY'), и я могу получить доступ к части ответа JSON в обратном вызове .then следующим образом: .then(response => response.json()).then(json =>())

я хочу знать, есть ли способ получить оба в блоке, который имеет проанализированные данные ответа JSON?


person Muhammad Talha Akram    schedule 27.05.2020    source источник


Ответы (2)


Да, ты можешь:

.then(response => {
    console.log(response.data)
    console.log(response.headers)
})

https://github.com/axios/axios#response-schema

person Nikolay Traykov    schedule 27.05.2020
comment
Я хочу получить доступ к проанализированной части ответа json, поэтому я могу отправить ее вместе с заголовком, используя создателя действия с избыточностью, например: props.updateUser({...json, token: response.header.get('TOKEN')}); - person Muhammad Talha Akram; 27.05.2020
comment
Так в чем проблема это сделать? Получите json от response.data и объедините его с токеном. - person Nikolay Traykov; 27.05.2020

Ну, я не знаю, как я пропустил это, решение было чрезвычайно простым, .json() возвращает Promise, поэтому мы можем просто вызвать .then внутри текущего контекста и делать то, что мы хотим с заголовками и телом ответа:

fetch('/url')
  .then(response => response.json().then(json => ({...json, token: response.headers.get('TOKEN')})))
  .then(json => props.updateUser(json));

Таким образом, мы можем получить желаемый объект, который содержит значения заголовка, а также данные ответа. Иногда для решения проблемы достаточно немного поспать.

person Muhammad Talha Akram    schedule 28.05.2020