then sincronas promesas funciones await async asincronia javascript ecmascript-6 es6-promise fetch-api

javascript - sincronas - promesas typescript



¿Por qué el objeto de respuesta de JavaScript fetch API es una promesa? (1)

Si su pregunta es "¿por qué response.json() devuelve una promesa?" entonces @Bergi proporciona la pista en los comentarios: "espera a que se cargue el cuerpo".

Si su pregunta es "¿por qué no es response.json un atributo?", Eso habría requerido que fetch retrasara la respuesta hasta que el cuerpo se hubiera cargado, lo que podría estar bien para algunos, pero no para todos.

Este polyfill debería darte lo que quieres:

var fetchOk = api => fetch(api) .then(res => res.ok ? res : res.json().then(err => Promise.reject(err)));

entonces puedes hacer:

fetchOk(API) .then(response => response.json()) .catch(err => console.log(err));

El reverso no se puede rellenar.

Al solicitar desde un servidor con API de recuperación de JavaScript, debe hacer algo como

fetch(API) .then(response => response.json()) .catch(err => console.log(err))

Aquí, response.json() está resolviendo su promesa.

La cuestión es que si desea detectar los errores de 404 , debe resolver la promesa de respuesta y luego rechazar la promesa de búsqueda, porque solo terminará en catch si ha habido un error de red. Entonces la llamada de búsqueda se convierte en algo así como

fetch(API) .then(response => response.ok ? response.json() : response.json().then(err => Promise.reject(err))) .catch(err => console.log(err))

Esto es algo mucho más difícil de leer y razonar. Entonces mi pregunta es: ¿por qué se necesita esto? ¿Cuál es el punto de tener una promesa como valor de respuesta? ¿Hay alguna forma mejor de manejar esto?