New async memo reveals a held signal update early
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- javascript, typescript
- Domain
- frontend
Research direction
Start by reading the async memo and scheduled render-effect behavior in the repository, then compare the issue’s reproduction with the earlier report #3408. The linked playground reproduces the early reveal; no source file or test is named, so locate or add focused coverage for synchronous versus asynchronous first results and the explicit flush. Done when the new observer remains held until the slow derivation settles.
Written by the indexing model from the issue text.
Description
Describe the bug
A newly created async memo reads an update that is still held by an existing async derivation, then notifies a scheduled render effect before that update is revealed. The existing scheduled render effect still last reported count = 1, slow = 1, while the new one reports 2.
The same newly created memo stays held when its first result is synchronous. Returning Promise.resolve(count()) instead makes it reveal early.
Your Example Website or App
https://s.olid.uk/id/22KYZfNOSnqqlHlUzL1MqQ
Steps to Reproduce the Bug or Issue
- Open the playground console and press Build (or reload).
- After about one second, observe
parent 1 1. - About 100ms later, observe
child 2while the parent is still held at1 1. - Roughly one second after that, the slow derivation settles and the parent finally reports
parent 2 2.
Expected behavior
The new scheduled render observer should stay held until the input update can be revealed with its slow derivation. An asynchronous first result should preserve the inherited hold, just as a synchronous first result does.
Screenshots or Videos
No response
Platform
- OS: Linux
- Browser: Chromium 151.0.7922.173
- Solid: 2.0.0-rc.13 in the playground; also reproduced on upstream
nextat b0bad02, in development and production.
Additional context
Both render effects use { schedule: true }, so this excludes the immediate mounting-effect path. The repro uses only primitives.
Two controls preserve the hold:
- Replace
Promise.resolve(count())withcount(). - Remove the explicit
flush()before creating the new memo.
The development warnings about unowned effects are expected in this minimal repro.
Related earlier report: #3408. Here the synchronous first result behaves correctly; the asynchronous first result does not.
- Dominant language
- TypeScript
- Stars
- 36.1k
- Forks
- 1.1k
- Avg merge
- 13h 13m
- Merged PRs (30d)
- 306
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from solidjs/solid
-
Difficulty 3/5 1-2 days Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 45/100
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 55/100
Maintainers usually reply within 1 day
-
Difficulty 3/5 Half a day Newbie friendliness 65/100
Maintainers usually reply within 1 day
-
Per-scope takeover for live nodes whose server value is still streaming (D8 follow-up to #3817)Open
Difficulty 4/5 3-5 days Newbie friendliness 45/100
Maintainers usually reply within 1 day
Similar issues
-
check:passed streams:add
Difficulty 1/5 Under an hour Newbie friendliness 86/100
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
OpenSlides/OpenSlides#7180 ·
-
area:claude-code-web area:docs bug
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
anthropics/claude-code#100184 ·
Maintainers usually reply within 1 day
-
Thumbnail generation from video buffers frames at source resolution: 2–3 GB per upload for 4K+ HEVCOpen
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
Chocobozzz/PeerTube#7817 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
open-telemetry/opentelemetry-js-contrib#3808 ·
Maintainers usually reply within 2 days