我正在使用 Ionic 框架构建 Cordova 应用程序。我使用angular-localForage作为应用程序持久存储的本地数据库。
在开发过程中,我正在 Windows 10 上使用 Google Chrome 45.0.2454.85 m 测试我的应用程序。angular-localForage 的版本为 1.2.3,localForage 的版本为 1.2.4。
我可以设置和检索数据没问题。要设置我使用的数据:
$localForage.setItem(myKey, myData).then(myCallbackFunction);
Run Code Online (Sandbox Code Playgroud)
根据docs,如果可用,localForage 应该使用 IndexedDB,而对于不可用的浏览器,则回退到 WebSQL。我可以通过查看 Chrome 开发人员工具中的资源看到它正在将我的数据存储在 WebSQL 中。
如果我将此代码放在我的控制器中,我会收到一条消息,指出 IndexedDB 可用:
if (!window.indexedDB) {
window.alert("Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.");
} else {
window.alert("IndexedDB available.");
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我有 IndexedDB 可用时,为什么它在 Chrome 中使用 WebSQL?
我正在尝试在reactjs 应用程序中使用localForage 。调用setItem然后getItem工作一次。用 设置的值setItem可以通过 正确恢复getItem。如果之后再次调用它们,TypeError则会抛出 a:
TypeError: self is undefined localforage.js:1012
Run Code Online (Sandbox Code Playgroud)
可以使用最小的reactjs应用程序来重现该错误,这里只是一个功能组件。
当组件被渲染时,它调用setItem和getItem。它会在单击按钮时重新渲染并setItem再次调用getItem。这会导致TypeError.
import React, { useState } from "react";
import { getItem, setItem } from "localforage";
function App() {
const [state, setState] = useState(0);
setItem("test", state).then(() => {
console.log("used localForage");
});
getItem("test").then((val) => {
console.log("got: ", val);
});
return (
<button
onClick={() => {
setState(Math.floor(Math.random() * 10)); …Run Code Online (Sandbox Code Playgroud) 我正在将localforage与indexedDB驱动程序配合使用。我的indexedDB存储空间很大,但给我的印象是indexedDB从未真正用完空间,它只是使旧内容过期。
但是,在挂起60秒后,对indexedDB的大量请求失败,并显示错误:“ DOMException:事务由于不活动而超时。”。
如果我只是做一个简单的
function testWrite(n) {
localforage.setItem(`test:${n}`, Math.random().toString(16).slice(2))
.then((v) => console.log(x))
.catch((err)=>console.log(err))
}
for (var x = 0; x < 10; x++) {
testWrite(x)
}
Run Code Online (Sandbox Code Playgroud)
在指向我的Web应用的隐身窗口中,它可以正常工作。如果在非隐身窗口中执行相同的操作,则会发生超时。重要的是:即使将循环大小增加到某个较大的值(即使是在新的会话中),也会遇到相同的超时问题。因此,感觉有些地方有些不正确。
我在Cordova应用程序中使用localForage.
我想知道localforage的大小.基本上它被称为5mb限制.我的移动应用程序中将有超过100mb的数据.
var DefaultConfig = {
description: '',
driver: DefaultDriverOrder.slice(),
name: 'localforage',
// Default DB size is _JUST UNDER_ 5MB, as it's the highest size
// we can use without a prompt.
size: 4980736,
storeName: 'keyvaluepairs',
version: 1.0
};
Run Code Online (Sandbox Code Playgroud)
大小是4980736字节,这是4.9MB ..如果我增加到100mb,它支持吗?
local-storage web-sql indexeddb angular-local-storage localforage
我对LocalForage的使用有些困惑。我只想保存并从LocalForage检索图像,这就是我的方法。
function preload() {
localforage.setDriver(localforage.LOCALSTORAGE).then(function() {
lcl_images[0] = new Object();
lcl_images[0].key = 'lclstorage_1';
lcl_images[0].value = 'http://www.superga.com/tcnimg/S/02/S009TE0/XBS009TE0___949______.jpg';
lcl_images[1] = new Object();
lcl_images[1].key = 'lclstorage_2';
lcl_images[1].value = 'https://mir-s3-cdn-cf.behance.net/project_modules/max_1200/2150fb35419617.56f6327b44e47.gif';
for (var i = lcl_images.length - 1; i >= 0; i--) {
var valore = lcl_images[i].value;
localforage.setItem(lcl_images[i].key, lcl_images[i].value, function() {
console.log('Saved: ' + valore);
});
}
});
}
function use_preloaded_image() {
for (var i = lcl_images.length - 1; i >= 0; i--) {
var key = lcl_images[i].key;
localforage.getItem(lcl_images[i].key, function(err, readValue) {
console.log('Read: ', readValue); …Run Code Online (Sandbox Code Playgroud) localforage ×5
indexeddb ×3
javascript ×2
angularjs ×1
blink ×1
blob ×1
promise ×1
reactjs ×1
web-sql ×1