const request = createEffect()
const requestCache = createStore({})
.on(request.finally, (cache, {params, ...result}) => {
if (params in cache) return cache
return {
...cache,
[params]: result,
}
})
requestCache.watch(cache => {
request.use(async (id) => {
const cachedResult = cache[id]
if (!cachedResult) {
return fetch('https://example.com')
}
if (cachedResult.status === 'fail') {
throw cachedResult.error
}
return cachedResult.result
})
})