如何实现indexeddb或localstorage支持的基于浏览器的队列?

时间:2017-01-19 18:57:45

标签: javascript queue indexeddb web-worker

我正在寻找一个基于浏览器的队列数据结构,由可在JS中使用的持久存储(localStorage或indexeddb)支持。

我的用例适用于离线应用,它应该使用队列在服务器重新联机后与其进行通信。

即类似rails delayed_job或resque,但是对于浏览器。

它会支持这样的API:

Queue.Enqueue(() => { // do something  })

队列将dequeu执行该功能(在背景中像webworker或希望的东西)并定期轮询新条目。

我该如何实现?

2 个答案:

答案 0 :(得分:1)

我有同样的需要。

首先,我想实现由WebSQL存储支持的持久队列,但后来我看到W3C正在停止WebSQL标准:

https://www.w3.org/TR/webdatabase/

最后,我使用和IndexedDB存储实现了它。我创建了一个带有自动增量密钥生成器的对象存储库,因此我只需将项添加到队列调用:

@app.route('/<path:path>')
def staticHost(self, path):
    try:
        return flask.send_from_directory(app.config['RESULT_STATIC_PATH'], path)
    except werkzeug.exceptions.NotFound as e:
        if path.endswith("/"):
            return flask.send_from_directory(app.config['RESULT_STATIC_PATH'], path + "index.html")
        raise e

您可以使用游标迭代所有队列项,只需执行以下操作:

objectStore.add(item)

默认情况下,游标按键的递增顺序迭代元素。由于在插入时自动增加了键,我们将按照FIFO顺序获取项目。

您可以在此处找到有关Indexed DB的更多信息:

https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB

答案 1 :(得分:0)

这是一个通用的浏览器中的localStorage队列,它适用于jStorage,Store.js或simpleStorage。需要jQuery和Groucho localStorage经理。

https://github.com/tableau-mkt/jqueue