我正在寻找一个基于浏览器的队列数据结构,由可在JS中使用的持久存储(localStorage或indexeddb)支持。
我的用例适用于离线应用,它应该使用队列在服务器重新联机后与其进行通信。
即类似rails delayed_job或resque,但是对于浏览器。
它会支持这样的API:
Queue.Enqueue(() => { // do something })
队列将dequeu执行该功能(在背景中像webworker或希望的东西)并定期轮询新条目。
我该如何实现?
答案 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经理。