Social Media Photo by Anthony Duran on Unsplash
A fetch with Response abilities.
(... see what I did there?)
import fetch from '@webreflection/fetch';
// await directly Response methods or accessors
console.log(await fetch('https://google.com').text());
console.log(await fetch('https://google.com').ok);
// all other Promise methods just work
console.log(await fetch('https://google.com').then(r => r.ok));The export is simply a Proxy that forwards to the Response any explicit intent, meaning:
- a
fetch(url, ...init)returns exactly afetch(url, ...init)reference- you can do everything you could do already with
fetch... this is fetch indeed! - you can use this module as drop-in replacement in your current code though
- you can eventually incrementally use its features if and/or when needed
- you can do everything you could do already with
- if any
Response.prototypeknown key is directly accessed, such property or method is forwarded directly to the response once the fetch is resolved - as the goal is to shortcut the response boilerplate,
Response.prototypekeys prevail overPromise.prototypeso if your argument is thatSymbol.toStringTagreturned the response one, I am afraid that's meant by design so that unless Promise API introduces a conflicting entry name with Response API, this module actually requires zero maintainability and it's future-friendly with API changes and whatnot - if you want to deal with
statusorokorheadersyou still can do that:- reference
const req = fetch(url, ...init) - use
try/catcharoundreq.json()orreq.text()or any other forwarded method - use
const { status, headers } = await reqorconst status = await req.statusor any other way you like to introspect the failure
- reference
// alternatively ...
const { ok, text } = await fetch(URL);
if (ok) console.log(await text());If none of this is interesting to you though, we're good! You can move on happily ever after 👋