midudev / curso-gratuito-svelte

Curso gratuito de Svelte en Youtube
https://midu.dev/introducci%C3%B3n-a-svelte/
32 stars 5 forks source link

res.ok is not a function #1

Open ferserc1 opened 3 years ago

ferserc1 commented 3 years ago

El problema es que ok es un atributo, no una función. Si se muestra el error en el template de Svelte indica de dónde viene el fallo.

{:catch error}
    <strong>❌ {error.message}</strong>
{/await}
res.ok is not a function

El problema es que sustituyendo res.ok() por res.ok tampoco se soluciona, porque hay usar throw para lanzar el error. Si simplemente devolvemos el error, lo caza el siguiente then, y el error que muestra es res.json is not a function

Como no podemos usar throw en una closure de una sola línea, al final me ha quedado así:

response = fetch(`https://www.omdbapi.com/?s=${value}&apikey=api_key`)
            .then(res => {
                if (!res.ok) {
                    throw new Error("Something bad happened with the fetching of movies")
                }
                else {
                    return res;
                }
            })
            .then(res => res.json())
            .then(apiResponse => apiResponse.Search || []);
yasielhp commented 3 years ago

Gracias por la solución aportada

ueliot commented 2 years ago

es justo lo que me pasaba, sin embargo en el video de midu parece funcionar res.ok(); y no podía encontrar este metodo en MDN, baje este repo y despues de >npm install bajó las dependencias pero el >npm run dev: me sale un error y no deja compilar posiblemente cambiaron algo en el rollup........; de todos modos lo he echo desde las dependencias actuales y todo funciona correctamente..... Pero me había quedado justo en este apartado..... Muchas gracias por la solución.

Sin embargo todavía me queda la duda; de donde salió este método res.ok() que usa midu (cambio algo en los métodos de fetch desde hace un par de años?)

YerayAlonso commented 2 years ago

Y así?

response = fetch(`https://www.omdbapi.com/?s=${value}&apikey=api_key`)
            .then(res => res.ok ? res : new Error('Something bad happened with the fetching of movies'))
            .then(res => res.json())
            .then(apiResponse => apiResponse.Search || []);