STEP GUIDE · Checkpoint 2

這個步驟要做什麼、改哪裡、怎麼看結果

這一步聚焦 TASK-02;下方只比較「Checkpoint 1 → Checkpoint 2」的真實異動。

01

三項 Task 進度

TASK-01已完成

訂閱主畫面並留下 adapter trace

預計修改:script.js

完成後:主畫面 subscriber 收到初始 snapshot,trace 顯示 subscribe 與 notify

TASK-02本步驟處理

安全渲染並管理第二 Console subscriber

預計修改:script.js

完成後:留言以純文字渲染,Console subscriber 可訂閱並可 unsubscribe

TASK-03稍後處理

模擬訂閱失敗、復原重試並新增留言

預計修改:script.js

完成後:失敗時保留舊留言且無幽靈 listener,retry 後畫面與 Console subscriber 同時收到新 snapshot

02

HTML、CSS、JavaScript 與文件實際異動

展開檔案卡查看必要差異;只有程式碼區可以橫向捲動。

HTML本步驟無異動

檔案:index.html

修改前

前一步與本步驟沒有實質差異。

修改後

本步驟不需修改此語言。
CSS本步驟無異動

檔案:style.css

修改前

前一步與本步驟沒有實質差異。

修改後

本步驟不需修改此語言。
JavaScript本步驟有異動

檔案:script.js

修改前

  list.textContent = `尚未完成 ${snapshot.length} 筆渲染`;

修改後

const consoleStartButton = document.querySelector("#console-start");
const consoleStopButton = document.querySelector("#console-stop");
let unsubscribeConsole = null;
function createMessageItem(message) {
  const item = document.createElement("li");
  item.dataset.id = String(message.id);
  item.textContent = String(message.text);
  return item;
}
  list.replaceChildren(...snapshot.map(createMessageItem));
function startConsoleSubscriber() {
  if (unsubscribeConsole) return;
  unsubscribeConsole = adapter.subscribe((snapshot) => {
    console.log("Console subscriber snapshot:", snapshot);
  }, "Console");
  consoleStartButton.disabled = true;
  consoleStopButton.disabled = false;
  refreshSubscriberCount();
}
function stopConsoleSubscriber() {
  if (!unsubscribeConsole) return;
  unsubscribeConsole();
  unsubscribeConsole = null;
  consoleStartButton.disabled = false;
  consoleStopButton.disabled = true;
  refreshSubscriberCount();
}
consoleStartButton.disabled = false;
consoleStartButton.addEventListener("click", startConsoleSubscriber);
consoleStopButton.addEventListener("click", stopConsoleSubscriber);
README/其他文件本練習未使用

檔案:README.md

修改前

本練習沒有這個檔案。

修改後

本步驟不需修改此語言。
03

怎麼看到結果

  1. 準備

    開啟 Checkpoint 2 的 Console,並找到第二訂閱者的「開啟」與「取消」按鈕。

  2. 操作

    開啟 Console subscriber,確認它收到初始 snapshot;再取消,對照 trace 中的 unsubscribe 與訂閱數。

  3. 預期

    留言以純文字渲染,Console subscriber 可訂閱並可 unsubscribe

Checkpoint 2 TASK-02

安全渲染並管理第二 Console subscriber

完成後可見:留言以純文字渲染,Console subscriber 可訂閱並可 unsubscribe

MEMORY ADAPTER(只練介面,不是 Firebase 連線)

可追蹤的即時留言

本頁每次重新整理都會建立獨立記憶體,不會跨分頁同步。

尚未訂閱

訂閱生命週期控制

目前 subscriber:0 個

Adapter trace