SolidJSS
SolidJSโ€ข9mo agoโ€ข
3 replies
Angius

Preferred way of handling `429 Too Many Requests` with `createResource`?

I have an API that returns 429 with a retry-after header. The way I handle it right now seems... suboptimal to me. It works fine, don't get me wrong, but I have a feeling it culd be handled better.
const [canLoad, setCanLoad] = createSignal(true);

const loadQuote = async () => {
    if (!canLoad()) {
        return JSON.parse(window.localStorage.getItem("quote")) as QuoteDto;
    }
    setCanLoad(false);

    const response = await getQuote();

    setTimeout(
        () => {
            setCanLoad(true);
        },
        Number.parseInt(response.headers.get("retry-after")) * 1000,
    );

    if (response.ok) {
        window.localStorage.setItem("quote", JSON.stringify(response.data));
        return response.data;
    }

    if (response.status === 429) {
        return JSON.parse(window.localStorage.getItem("quote")) as QuoteDto;
    }
};

const [quote, { refetch }] = createResource<QuoteDto>(() => loadQuote());
Was this page helpful?