UNPKG

@mittwald/react-use-promise

Version:

Simple and declarative use of Promises in your React components. Observe their state and refresh them in various advanced ways.

25 lines (24 loc) 895 B
import { Tags } from "../store/Tags.js"; import { defaultStorageKeyBuilder } from "../store/defaultStorageKeyBuilder.js"; import { AsyncResource } from "./AsyncResource.js"; import { asyncResourceStore } from "./store.js"; export function getAsyncResource(asyncFn, parameters, options = {}) { const { loaderId, tags } = options; if (parameters === null) { return AsyncResource.voidInstance; } const storageKey = defaultStorageKeyBuilder({ asyncFn, parameters, loaderId, }); const asyncResourceLoader = () => asyncFn(...parameters); const resourceBuilder = () => new AsyncResource(asyncResourceLoader, { tags: new Tags(tags), }); const asyncResource = asyncResourceStore.getOrSet(storageKey, resourceBuilder, { tags: tags, }); asyncResource.updateLoader(asyncResourceLoader); return asyncResource; }