修改前
if (unsubscribeView) unsubscribeView();
unsubscribeView = adapter.subscribe((snapshot) => {
status.textContent = `主畫面收到 ${snapshot.length} 筆 snapshot`;
renderMessages(snapshot);
}, "主畫面");
修改後
const form = document.querySelector("#message-form");
const input = document.querySelector("#message-input");
const submitButton = document.querySelector("#message-submit");
const failureButton = document.querySelector("#simulate-subscribe-failure");
const retryButton = document.querySelector("#retry-subscription");
if (unsubscribeView) {
unsubscribeView();
unsubscribeView = null;
}
status.textContent = "訂閱中…";
try {
unsubscribeView = adapter.subscribe((snapshot) => {
status.textContent = `主畫面收到 ${snapshot.length} 筆 snapshot`;
renderMessages(snapshot);
}, "主畫面");
retryButton.disabled = true;
} catch (error) {
status.textContent = `訂閱失敗:${error.message};舊留言已保留,請重試。`;
retryButton.disabled = false;
}
function addMessage(text) {
const cleanText = text.trim();
if (!cleanText) {
status.textContent = "請先輸入留言";
return;
}
if (!unsubscribeView) {
status.textContent = "主畫面尚未訂閱,請先按重試訂閱。";
return;
}
adapter.push(cleanText);
input.value = "";
}
failureButton.disabled = false;
submitButton.disabled = false;
failureButton.addEventListener("click", () => {
adapter.failNextSubscribe();
startListening();
});
retryButton.addEventListener("click", startListening);
form.addEventListener("submit", (event) => {
event.preventDefault();
addMessage(input.value);
});