簡體   English   中英

IndexedDB:避免回調地獄

[英]IndexedDB: avoiding callback-hell

我有一個IndexedDB,它在本地緩存具有三個屬性a,b和c的數據。 a和b共同構成一個組合鍵,而c是我所追求的內容。

現在,客戶端從服務器獲取我要顯示的項目列表。 然后,客戶端應在IndexedDB中查找(a,b)並檢索匹配的c,然后使用sha1(使用Rusha哈希c)進行哈希c。

對於sha1(c_client)與sha1(c_server)不匹配的那些項,客戶端從服務器檢索所有(a,b)對(使用一個GET請求,並帶有(a,b)的JSON序列化數組)。 服務器返回c的更新內容,然后客戶端將新的c存儲在IndexedDB中,然后將整個對象數組提供給display函數。

如您所見,邏輯的大部分絕對需要順序操作-但是IndexedDB是高度異步的。

有什么方法可以以同步方式執行我想要的操作嗎?

我對IndexedDB回調的方法是使用publish subscription模式進行事件調度。 您可以編寫自己的處理程序,也可以使用JQuery觸發器。

我所做的是將所有邏輯IndexedDB事件分組,並且當IndexedDB回調發生時,它將通知發布者發生了哪種事件,發布者將通知所有等待該事件的函數。

我有以下示例事件:創建數據庫,完成索引編制,開始同步,完成同步...我也有一些用於同步進度的事件,這些事件用於通知用戶進度(我正在批量同步)。

發布-訂閱模型使我可以將IndexedDB代碼與UI代碼高度去耦,從而使我可以輕松地修改事件操作代碼或為同一事件添加更多偵聽器。 如果您需要順序功能,則可以將事件鏈接起來,當一個事件完成以觸發它已完成並且下一個事件可以繼續時,就可以進行鏈接。

在規范最終確定之前,IndexedDB API的同步版本已被放棄,因此您將始終必須以異步方式工作。

API也讓我很煩惱,所以我創建了一個名為db.js的簡單包裝,該包裝使用Promises進行查詢。 如果您有幸僅將目標鎖定在支持生成器的平台上,則可以將它們與db.js結合使用, 以使其更加同步

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM