Fix QueryManager
for queries with fetchPolicy="no-cache"
#4573
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes a bug with
fetchPolicy="no-cache"
, where data initially appears, and then subsequently disappears (e.g. #3452 (comment)). I was able to reproduce the issue:Use
InMemoryCache
.Make a query with
fetchPolicy="no-cache"
. It will resolve correctly and the data will be available.While that query is still being observed (via
ObservableQuery
), make a separate query usingcache-and-network
(I don't think thefetchPolicy
is actually significant here).When the new query updates the cache:
QueryManager#broadcastQueries()
is called.callback
(which was incorrectly setup when theno-cache
query was created) is executed and callsthis.setQuery(queryId, () => ({ invalidated: true, newData }));
newData
is empty, but the query is updated anyway.ObservableQuery
for theno-cache
query has the empty result emitted.I'm not familiar enough with this codebase to know how to write a test for this, so it'd be great if someone else could jump in and help with that.
Relates to #3452.
Questions:
this.dataStore.getCache().watch({…})
trigger for theno-cache
query when a different (unrelated) query updates the cache?Checklist: