Skip to content

Commit

Permalink
fix: always call fallback function
Browse files Browse the repository at this point in the history
  • Loading branch information
dai-shi committed Oct 26, 2023
1 parent 04a880b commit 3744b21
Showing 1 changed file with 6 additions and 10 deletions.
16 changes: 6 additions & 10 deletions src/vanilla/utils/unwrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export function unwrap<Value, Args extends unknown[], Result, PendingValue>(
() => {
type PromiseAndValue = { readonly p?: Promise<unknown> } & (
| { readonly v: Awaited<Value> }
| { readonly f: PendingValue }
| { readonly f: PendingValue; readonly v?: Awaited<Value> }
)
const promiseErrorCache = new WeakMap<Promise<unknown>, unknown>()
const promiseResultCache = new WeakMap<Promise<unknown>, Awaited<Value>>()
Expand Down Expand Up @@ -76,12 +76,8 @@ export function unwrap<Value, Args extends unknown[], Result, PendingValue>(
)
.finally(setSelf)
}
if (prev) {
if ('v' in prev) {
return { p: promise, f: fallback(prev.v) }
} else if ('f' in prev) {
return { p: promise, f: prev.f }
}
if (prev && 'v' in prev) {
return { p: promise, f: fallback(prev.v), v: prev.v }
}
return { p: promise, f: fallback() }
},
Expand All @@ -99,10 +95,10 @@ export function unwrap<Value, Args extends unknown[], Result, PendingValue>(
return atom(
(get) => {
const state = get(promiseAndValueAtom)
if ('v' in state) {
return state.v
if ('f' in state) {
return state.f
}
return state.f
return state.v
},
(_get, set, ...args) =>
set(anAtom as WritableAtom<Value, unknown[], unknown>, ...args)
Expand Down

0 comments on commit 3744b21

Please sign in to comment.