建立待同步 queue
每次本機變更都加入有唯一 id 的 queue item。
CHAPTER 27 · 120 MINUTES
本章使用課次 27 前 120 分鐘,以 mock sender 練習失敗保留與重試;真實 GAS 必須另外提出 Network、queue 與 Sheet 證據。
LEARNING GOALS
每次本機變更都加入有唯一 id 的 queue item。
成功項移除,失敗項保留,線上後可以重試。
Mock 預檢只證明流程,不宣稱 GAS 已部署或 Sheet 已寫入。
PROBLEM & ANALOGY
第 26 章證明單一瀏覽器可以保存;本章加入 enqueue、sender、失敗保留與 retry。queue 記的是待做動作,不是遠端完整資料。
本章要解決:catch 後清空 queue 會造成資料遺失,而 mock queue 歸零也不能冒充真實 Sheet 寫入。
合回共同作品:同步原型會作為第 28 章部署前的資料可靠性檢核。
SCOPE
enqueue、逐筆 mockSend、成功移除、失敗保留、retry 與 preflight。
doPost(e)、/exec、Network 回應與 Sheet 新列。
多人 conflict 合併、正式離線同步引擎與敏感資料公開寫入。
GAS 延伸實作與證據規格不取代標準 mock 練習。
CORE IDEAS
syncQueue() 逐筆交給 sender;成功不再保留,catch 的項目放入 failed。DEBUGGING & SECURITY
課堂刻意錯誤:catch 後把 queue 清空;或只判 queue.length 為 0,讓 offline 空 queue 也顯示預檢通過。
/exec、response、部署版本與 Sheet;不公開 token、個資或真實 URL。先查:檢查 catch 是否保留 failed 項,成功才移除。
先查:預檢不能只看 queue.length,還要看網路與結果。
先查:檢查模式文案,live 要另附 Network、JSON、Sheet 證據。
PRACTICE CONTRACT
檔案:script.js
位置:loadQueue()、saveQueue()、render()、enqueue()
結果:每筆變更顯示不同短 id,待同步數量增加且重整後仍保留
檔案:script.js
位置:syncQueue()
結果:離線同步時全批保留,回到線上同步後全批移除
檔案:script.js
位置:retryAndPreflight()
結果:離線重整不丟件;恢復模擬網路後成功移除並顯示 GAS 邊界
EVIDENCE
變更 ______ 先進入 queue;offline 時 ______;成功回應後才 ______;本次模式是 ______。
GAS 延伸需另外驗 Network POST/JSON、queue 狀態與 Sheet 新列;三者缺一不可。
標準驗收:記錄同步前後 queue id,證明 offline 失敗保留、online 成功才移除;畫面文案必須寫「Mock,尚未驗證 GAS」。
GAS 延伸另驗:Network POST 與 JSON 回應、同步後 queue 狀態、Sheet 新列,三者缺一不可。
下一章:部署真實 Production URL,並分開格式預檢與人工驗真。