2.0.0-rc.14: until() through a synchronous memo misses optimistic confirmation
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- frontend
Direzione di ricerca
Start by reproducing with the playground component in the issue, then swap the predicate between doubled() and count() to confirm the memo is the difference. The payload names no source files, so you will need to find where until() subscribes and how a synchronous createMemo propagates optimistic values on confirmation. Done when yield until(() => doubled() === 2) completes after setSource(1), matching the direct-read control.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
On 2.0.0-rc.14, an action waiting with until() through a synchronous memo remains pending when the actual source confirms its optimistic prediction. Reading the optimistic accessor directly in the predicate completes the same action.
The predicate subscribes before confirmation arrives. The prediction alone correctly does not satisfy the wait, but confirming it does not resolve the wait through the memo either.
Your Example Website or App
https://s.olid.uk/?id=d1d1a3ee-70c8-4afe-966d-258809cb4f06
The playground uses published 2.0.0-rc.14. Here is the full component, including the actual source update in the Confirm button:
import { action, createMemo, createOptimistic, createSignal, until } from "solid-js";
import { render } from "solid-js/web";
function App() {
const [source, setSource] = createSignal(0);
const [count, guess] = createOptimistic(() => source());
const doubled = createMemo(() => count() * 2);
const [completed, setCompleted] = createSignal(false);
const save = action(function* () {
guess(1);
yield Promise.resolve();
// Direct-read control: yield until(() => count() === 1);
yield until(() => doubled() === 2);
});
return (
<main>
<button onClick={() => save().then(() => setCompleted(true))}>1. Start</button>
<button onClick={() => setSource(1)}>2. Confirm</button>
<p>Displayed count: {count()}</p>
<p>Doubled memo: {doubled()}</p>
<p>Action completed: {String(completed())}</p>
</main>
);
}
render(() => <App />, document.getElementById("app")!);
Steps to Reproduce the Bug or Issue
- Open the playground and click 1. Start.
- The displayed count becomes
1and the doubled memo becomes2. Action completion remainsfalse, as expected while the prediction is unconfirmed. - Click 2. Confirm to set the actual source to
1. - Action completion still remains
false. - Change the wait to
yield until(() => count() === 1), rebuild, and repeat. Action completion becomestrueafter confirmation.
Both the failing memo case and the successful direct-read control were verified in the browser.
Expected behavior
The optimistic prediction alone should not satisfy until(). Once the actual source confirms the prediction, the predicate through the synchronous memo should resolve and the action should complete, just as the direct-read predicate does.
Platform
- OS: Linux (WSL)
- Browser: Chrome for Testing 153.0.8010.12, tested with Playwright
- Solid:
2.0.0-rc.14
- Lingua principale
- TypeScript
- Stelle
- 36.1k
- Fork
- 1.1k
- Merge medio
- 11h 34m
- PR unite (30g)
- 341
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di solidjs/solid
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 1 giorno
-
[diagnostics rc.14 / next] Browser bridge drops shared references, so `expectNoSilentHolds` throws on any capture with a `LONG_HOLD`Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 12/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 32/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 52/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di solidjs/solid
Issue simili
-
submodule-pointer-regression
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
smith-horn/skillsmith#3061 ·
I maintainer di solito rispondono entro 1 giorno
-
area: ops type: test
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
accensa/x402-facilitator-stellar#559 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
cosimochellini/one-piece-zero-spoiler#551 ·
I maintainer di solito rispondono entro 1 giorno
-
getWatched() omits __proto__ directories when cwd is setForse già presa @maxazure l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
-
area:web enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno