/** * 创建一个资源复用函数,多次调用这个资源复用函数,会返回同一资源 * * 如果函数抛出错误,则不会缓存这个资源 * * @param creator 函数返回一个资源,资源会被缓存 * * @example * let useMap = useOf(()=> new Map()) * let map1 = useMap() * let map2 = useMap() * map1 === map2 // true * */ export function useOf(creator: () => Promise): () => Promise export function useOf(creator: () => T): () => T export function useOf(creator: () => T): () => T { let cache: T | undefined return () => { if (cache) { return cache } else { cache = creator() return cache } } }