Kong/swrv

Omitting fetcher function argument is ambiguous?

tmladek opened this issue · 6 comments

The README states:

Note that fetcher can be any asynchronous function, so you can use your favorite data-fetching library to handle that part. If ommitted, swrv uses the Fetch api.

But later also:

To only retrieve a swrv cache response without revalidating, you can omit the fetcher function from the useSWRV call.

So, which one is it? :) Or am I misunderstanding what omitting means in the first case?

yes it is ambiguous, thanks for noting! We need to document and maybe add some tests so it's clear. It should be:

- To only retrieve a swrv cache response without revalidating, you can omit the fetcher function from the useSWRV call
+ To only retrieve a swrv cache response without revalidating, you can set the fetcher function to `null` from the useSWRV call 

If it is "omitted" (aka undefined) then the Fetch api will be used.

if (typeof fn === 'undefined') {

Relevant swr issue: vercel/swr#738

This is great, but the typings for it do not allow null, it should be a quick fix to just add null to the type definition.

My PR resolves typing problem.
#274

Current doc is not ambiguous for me, function calls f(), f(undefined) and f(undefined, undefined) have the same arguments (geek note: except argument length). In JS, omitting argument always means supplying undefined.

Yeah, but I think it's good to clarify the doc.

afaik, the null fetcher behaves like Promise.race([]) or () => new Promise<never>(() => {}) (meaning resolves after infinite minutes), but isVaildating value differs.