fix(B05): 배분 선반입 되먹임을 응답 반영 구간에서 끊음
표식(측점 수 + 누계)만으로는 부족했음 — 응답을 반영해 다시 그린 뒤 누계가 아주 조금 달라지는 경로가 있어 편집이 멈춘 뒤에도 2~3바퀴가 더 돌았음(보조 창 10초 관찰: 2.8~6.3초에 걸쳐 3건). onReady 로 다시 그리는 동안 applying 을 세워 그 그리기가 거는 schedule 을 무시함. 자체검증(공용 브라우저, 접은 채 계획고 6회 편집 후 10초 관찰 3회) — 3/3/1건 -> 2/1/1건. 편집하는 동안은 종전대로 0건(400ms 안정화 유지). typecheck 통과. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -46,6 +46,8 @@ export function createHaulPlanPrefetch(
|
||||
let pending: unknown = null;
|
||||
/** 마지막으로 보낸 입력의 표식 — 같은 값이면 다시 묻지 않는다. */
|
||||
let sentKey: string | null = null;
|
||||
/** 받은 값을 화면에 반영하려고 다시 그리는 중 — 그 그리기가 거는 요청은 무시한다. */
|
||||
let applying = false;
|
||||
|
||||
/**
|
||||
* 입력이 달라졌는지 가리는 짧은 표식. 응답이 오면 곡선을 다시 그리고, 그리기가 다시
|
||||
@@ -81,7 +83,15 @@ export function createHaulPlanPrefetch(
|
||||
// 늦게 온 응답은 버린다 — 그 사이 사용자가 계획고를 더 만졌을 수 있다.
|
||||
if (seq !== sequence) return;
|
||||
plan = payload.haul_plan ?? null;
|
||||
onReady();
|
||||
// 다시 그리기가 `schedule` 을 되부르므로 그 한 바퀴를 막는다. 표식(`sentKey`)만으로는
|
||||
// 부족했다 — 반영 뒤 누계가 아주 조금 달라지는 경로가 있어 2~3바퀴가 더 돌았다
|
||||
// (2026-09-06 보조 창 실측: 편집이 멈춘 뒤 2.8~6.3초에 걸쳐 3건).
|
||||
applying = true;
|
||||
try {
|
||||
onReady();
|
||||
} finally {
|
||||
applying = false;
|
||||
}
|
||||
} catch {
|
||||
// 배분을 못 받아도 곡선 자체는 그대로 보인다 — 화면을 막지 않는다.
|
||||
} finally {
|
||||
@@ -91,6 +101,7 @@ export function createHaulPlanPrefetch(
|
||||
|
||||
return {
|
||||
schedule(result) {
|
||||
if (applying) return; // 응답을 반영하려고 다시 그리는 중이다.
|
||||
const key = keyOf(result);
|
||||
if (key === sentKey) return; // 같은 값 — 응답이 부른 재그리기가 되돌아온 것이다.
|
||||
sentKey = key;
|
||||
|
||||
Reference in New Issue
Block a user