Skip to content

Commit 94efadf

Browse files
committed
fix(store): resolve to cached model when state is pending
1 parent f916fe6 commit 94efadf

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

src/cache.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,17 @@ import * as emitter from "./emitter.js";
33
const entries = new WeakMap();
44
const stack = new Set();
55

6-
function dispatch(entry) {
6+
function dispatch(entry, resolved = false) {
77
const contexts = [];
88
let index = 0;
99

10-
while (entry) {
11-
entry.resolved = false;
10+
entry.resolved = resolved;
1211

12+
while (entry) {
1313
if (entry.contexts) {
1414
for (const context of entry.contexts) {
1515
if (!stack.has(context) && !contexts.includes(context)) {
16+
context.resolved = false;
1617
contexts.push(context);
1718
}
1819
}
@@ -137,7 +138,7 @@ export function sync(target, key, fn, value) {
137138
entry.value = nextValue;
138139
entry.assertValue = undefined;
139140

140-
dispatch(entry);
141+
dispatch(entry, true);
141142

142143
// mark as resolved to avoid double fn call in get
143144
entry.resolved = true;

src/store.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,8 +1120,10 @@ function get(Model, id) {
11201120
const entry = cache.getEntry(config, stringId);
11211121
const cachedModel = entry.value;
11221122

1123-
if (entry.resolved && cachedModel && !validate(cachedModel)) {
1124-
entry.resolved = false;
1123+
if (cachedModel) {
1124+
entry.resolved =
1125+
(entry.resolved && validate(cachedModel)) ||
1126+
getModelState(cachedModel).state === "pending";
11251127
}
11261128

11271129
return cache.get(config, stringId, () => {

0 commit comments

Comments
 (0)