對於任務列表應用,當用戶創建任務時,後端需要返回一個ID以唯一標識該任務當用戶稍後刪除任務時,可以在後端引用正確的任務。前端即時記錄創建和刪除,無需等待後端返回
但是,如果用戶在後端返回標識符之前刪除任務該怎麼辦?
可能不雅的解決方案我認爲:
- 防止刪除任務的用戶,直到後端返回標識符
- 產生在客戶端側(可能與用戶ID +時間戳)標識符
- 將創建和刪除操作結合在一起,在客戶端分配臨時ID並使用Promises確保正確刪除。 (難看的Redux框架解決方案?)
對於任務列表應用,當用戶創建任務時,後端需要返回一個ID以唯一標識該任務當用戶稍後刪除任務時,可以在後端引用正確的任務。前端即時記錄創建和刪除,無需等待後端返回
但是,如果用戶在後端返回標識符之前刪除任務該怎麼辦?
可能不雅的解決方案我認爲:
可以在Redux上正常工作的「乾淨」解決方案可以在客戶端使用生成的標識符。
所以一個用戶,在客戶端上生成一個任務id,之後用AJAX發送。
我會建議禁用刪除按鈕,直到你從服務器得到迴應。我知道這裏有更多的例子,但我能想到的一個例子就是在TFS門戶中。當您創建新的用戶素材時,該行會立即添加到網格中(位於頂部)。然後將api POST發送到服務器。如果您立即右鍵單擊該行,您將看到一個帶有微調框的彈出式菜單。然後,大約一秒鐘之後,前端從POST獲取響應,並且彈出菜單中填充了兩個項目(Add Task和Add Bug)。
這對於代碼庫和用戶界面來說都是不必要的複雜化。我正在領導第二個解決方案。那有什麼缺點? – Avery235
您仍然必須驗證數據庫記錄是否實際「保存」在服務器上。如果你在前端生成了id,然後將它保存在後端,會發生這種情況,但是由於某種原因,你的數據庫調用了錯誤?我的觀點是,你將不得不檢查和確認記錄是否以任何方式保存。 –
最簡單的解決方案是等待響應並禁用刪除按鈕,直到收到響應。無論如何,你應該這樣做,因爲如果你沒有收到答覆,這意味着它沒有被保存在首位。 – zfrisch
也許你可以在你還在等待回調的時候按下你的刪除按鈕來中止()網絡請求?否則,您可以調用您的刪除請求。無論哪種情況,您都可以立即更新UI。 –
@NormanBreau @NormanBreau服務器可能已經執行了創建,但仍然在將響應發送回客戶端,在這種情況下,刪除流程既不可能也不需要。 – Avery235