Describe the bug
Two async memos derive from the same signal. Reading isPending(() => [fast(), copy()]), where copy is a synchronous memo wrapping the slow result, makes Fast display 1 while Slow still displays 0. Pending reports false during this interval.
Removing the pending read makes both values update together.
Your Example Website or App
https://s.olid.uk/id/P4Zyb5IlR_Gmz8H0dvcBUQ
Steps to Reproduce the Bug or Issue
- Wait for initialization.
- Click Run.
- Fast becomes 1 while Slow remains 0 and Pending reports false.
- After one second, Slow becomes 1.
Expected behavior
The pending read should not cause a partially published update. Both values should update together, with Pending true until they are ready.
Screenshots or Videos
No response
Platform
Verified with compiled JSX in jsdom on Node.js 24.18.0, in development and production builds.
Additional context
Reproduced on next at efcaeba.
Possibly related to #3409/#3425, but this uses an ordinary signal update and a synchronous memo after the slow async memo. Replacing copy with a plain getter also removes the problem.
This reduced repro passes on #3337 at 20f3143 and its base b5bd6fb, so that passing result does not establish that #3337 fixes the current failure.
Describe the bug
Two async memos derive from the same signal. Reading
isPending(() => [fast(), copy()]), where copy is a synchronous memo wrapping the slow result, makes Fast display 1 while Slow still displays 0. Pending reports false during this interval.Removing the pending read makes both values update together.
Your Example Website or App
https://s.olid.uk/id/P4Zyb5IlR_Gmz8H0dvcBUQ
Steps to Reproduce the Bug or Issue
Expected behavior
The pending read should not cause a partially published update. Both values should update together, with Pending true until they are ready.
Screenshots or Videos
No response
Platform
Verified with compiled JSX in jsdom on Node.js 24.18.0, in development and production builds.
Additional context
Reproduced on next at efcaeba.
Possibly related to #3409/#3425, but this uses an ordinary signal update and a synchronous memo after the slow async memo. Replacing copy with a plain getter also removes the problem.
This reduced repro passes on #3337 at 20f3143 and its base b5bd6fb, so that passing result does not establish that #3337 fixes the current failure.