medikoo / memoizee

Complete memoize/cache solution for JavaScript
ISC License
1.75k stars 61 forks source link

max option does not work with promise option #131

Open jackgeek opened 2 years ago

jackgeek commented 2 years ago

When using promise: true option the max option is no longer honored.

See example here: https://codesandbox.io/s/green-sun-fkotwo?file=/src/App.tsx

medikoo commented 2 years ago

@jackgeek Technically there's no bug, thing is that values are memoized after async function resolves, and it's at resolution point where max option is evaluated.

See

memoizedAsync(1); // cache size still 0
memoizedAsync(2); // cache size still 0
memoizedAsync(3); // cache size still 0
memoizedAsync(4); // cache size still 0

vs

await memoizedAsync(1); // cache size 1
await memoizedAsync(2); // cache size 2
await memoizedAsync(3); // cache size 3
await memoizedAsync(4); // cache size 4

Still, I agree that desired would be to handle the cache limit at the invocation moment and not at the function resolution moment. I've updated the v1.0 draft proposal to take that into account