当我试图从对象存储中检索数据时,IndexedDB出现了问题。
function GetLayoutData(key) {
indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;
var open = indexedDB.open("DB", 1);
open.onsuccess = function () {
db = open.result;
tx = db.transaction("Store", "readwrite");
var store = tx.objectStore("Store");
store.get(key).onsuccess = function (event) {
console.log(event.target.result);
return event.target.result;
}
}基本上,我有一个函数,我想返回检索到的值,这样我就可以使用它来设置和输入元素,问题是该函数不等待事件,只是没有返回任何数据,因为它还没有任何数据。函数是这样的,我如何告诉它在返回之前等待"onsuccess“完成?
任何帮助都会被极大地利用。
发布于 2018-03-06 10:24:39
可能的解决方案与Promise;
function getLayoutData (key) {
return new Promise (function(resolve) {
indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;
var open = indexedDB.open("DB", 1);
open.onsuccess = function () {
db = open.result;
tx = db.transaction("Store", "readwrite");
var store = tx.objectStore("Store");
store.get(key).onsuccess = function (event) {
return resolve(event.target.result);
}
}
});
}然后按如下方式实现:
const result = await getLayoutData();
// Do whatever you want with the data通常,您需要一个(应许填充)来使它与不支持承诺的浏览器(例如IE)一起工作。因为IE不支持indexedDB,所以您不必在这种情况下使用它。
https://stackoverflow.com/questions/49128292
复制相似问题