@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
JavaScript
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;
}