Summary
For GraphQL fields that allows sub-selections, where the cache contains an empty array, or nulls for nullable object fields, it may block the proxy from capturing selections further down the tree.
A previous attempt #1757 reduces the effect, but it doesn't not prevent the issue in use cases with multiple concurrent fetches.
Steps to reproduce
These are user reported scenarios:
resolve() on paginated queries may trigger this after one of the result set contains a null object under an array.
useQuery() in React may fail when a new fetch is triggered during an active fetch, where the response of the first fetch clears selections before the second one has a chance to cache it.
createQuery() in Solid includes an attempt to fix this, but it triggers another issue where the last promise fails to resolve, locking the UI in a loading/suspended state.
Expected Results
When new fetches are triggered,
- responses from previous fetches should update the cache
- responses from previous fetches should not trigger cache listeners
- responses from previous fetches should not trigger the
onNext callback in subscribe
- response of the last fetch should update the cache, notify cache listeners and trigger UI updates downstream.
Additional Information
#1758 will attempt to cover racing condition on cache updates and selection clearing for concurrent fetches.
Summary
For GraphQL fields that allows sub-selections, where the cache contains an empty array, or nulls for nullable object fields, it may block the proxy from capturing selections further down the tree.
A previous attempt #1757 reduces the effect, but it doesn't not prevent the issue in use cases with multiple concurrent fetches.
Steps to reproduce
These are user reported scenarios:
resolve()on paginated queries may trigger this after one of the result set contains a null object under an array.useQuery()in React may fail when a new fetch is triggered during an active fetch, where the response of the first fetch clears selections before the second one has a chance to cache it.createQuery()in Solid includes an attempt to fix this, but it triggers another issue where the last promise fails to resolve, locking the UI in a loading/suspended state.Expected Results
When new fetches are triggered,
onNextcallback insubscribeAdditional Information
#1758 will attempt to cover racing condition on cache updates and selection clearing for concurrent fetches.