噗浪長文發到一半斷掉,重按送出反而重複發文

這幾天主要在處理一個發文工具的問題:本來設計成一次把整篇長文送出去的功能,遇到樓層很多、又帶很多圖片的貼文時會半路卡住,而使用者重新嘗試送出時反而讓貼文重複出現。
送出按鈕按了一次,卻在系統裡跑成兩次
我做了一個工具,可以把寫好的長文自動拆成一樓一樓,發到噗浪(一個社群平台)上。如果文章不長、圖片不多,這套流程一直運作得很順。
問題出在超過二十樓、又帶了不少圖片的長文。系統背後負責處理整篇文章的程式,跑到一半會被系統自己中斷,因為它跑太久超過了平台允許的等待時間。這時候畫面上不會出現正常的錯誤訊息,而是一段看起來像亂碼的文字,使用者完全看不懂發生了什麼事。
更麻煩的是,中斷發生的時候,主文跟前面幾樓的回文其實已經真的發出去了,只是使用者不知道,畫面上看起來像是整個失敗了。於是使用者很自然地重新按一次送出,結果就是主文跟前幾樓被重複發了一次,變成同一篇貼文有兩份重疊的內容卡在噗浪上。
這等於是去便利商店結帳,機器當機讓你以為沒付成功,你又刷了一次卡,結果其實第一次早就扣款成功了,最後你被扣了兩次錢。
我把「整篇文章一次送出」的做法拆掉,改成一樓一樓分開送。每送完一樓,系統會記住送到哪裡;如果中途真的斷線或失敗,重新按送出的時候會從斷掉的地方接著送,不會從頭重來,也就不會重複。圖片也一樣,同一張圖只要上傳過一次,後面各樓要用到時直接沿用,不會重複上傳。
下次遇到「一個按鈕要觸發一連串很多步驟的動作」,如果步驟數量沒有上限(例如樓層數、圖片數都是使用者自己決定的),就要假設中途一定會被打斷,事先想好「斷在哪裡都能接著做,而不是每次都從頭開始」,否則使用者的重試動作反而會變成幫倒忙。
flowchart LR subgraph 以前 A[整篇一次送出] --> B[卡在系統時間限制] B --> C[畫面出現看不懂的錯誤] C --> D[主文和部分回文其實已送出] D --> E[使用者重按送出] E --> F[貼文出現重複] end subgraph 現在 G[主文先送] --> H[每一樓分開送] H --> I[若中斷從斷點接著送] I --> J[不會重複] end
note技術細節:發文流程從單一端點拆成三個
原本整篇文章由 /api/publish-all 一個端點處理,超過 Vercel 函式時限 300 秒被中止(log 顯示 504 Task timed out after 300 seconds),前端解析錯誤頁時因為收到非 JSON 內容出現 Unexpected token 'A'。
已移除 /api/publish-all,改為三個端點:
/api/publish/check:檢查整篇圖片標記是否齊全/api/publish/main:只發主文/api/publish/reply:發單則回文,前端逐樓呼叫 圖片上傳結果由前端維護跨樓層的快取,同一張圖在整篇文章中只上傳一次。
本篇由跨專案自動彙整產生,素材為 2026-09-28 之後 3 個專案的提交紀錄與 0 則知識投遞。