我有一个Cordova移动应用程序,该应用程序将离线数据存储在localStorage中。最近,由于localStorage的限制为5MB,用户开始收到QUOTA_EXCEEDED_ERR错误。我决定使用“ localForage”框架,但我注意到它是异步工作的。由于我不想将所有复杂的应用程序包装都重写为回调函数,因此我想知道是否存在某种同步使用“ localForage”的方法(等待getItem函数返回值)。
这是我要执行的代码示例:
localforage.setItem('testKey', 'testValue', function() {
var value = getValue('testKey');
console.log(value); // here I get undefined, but I want to get a value
});
function getValue(key) { // I want this function to return value
var result;
localforage.getItem(key, function(value) {
result = value;
});
return result;
}
我希望getValue()返回一个值而不更改任何其他代码
据此link
localForage具有双重API,允许您使用Node样式回调或承诺。如果您不确定哪一个适合您,建议使用Promises。
因此,您可以根据需要使用其中的任何一个。如果使用诺言,您可以使用async/await
等待结果
localforage.setItem('testKey', 'testValue', async function() {
var value = await getValue('testKey')
console.log(value); // here I get undefined, but I want to get a value
});
async function getValue(key) {
var result = await localforage.getItem(key);
return result;
}
我没有测试它,也没有使用localForage的经验,但是我想如果您将结果设置为回调的返回值并返回它,那就是您想要的
function getValue(key) {
var result = localforage.getItem(key, function(err, value) {
return value;
});
return result;
}
我有同样的问题...我试图从同步函数中获取Item,因为我的所有代码都基于localStorage。您是否找到解决问题的方法?谢谢您的帮助!