IndexedDB等待事件

izj3ouym  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(1)|浏览(199)

尝试从对象存储检索数据时,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”完成?
任何帮助都是大大挪用的。

wtlkbnrh

wtlkbnrh1#

可能的解决方案有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

一般来说,你需要一个(promise polyfill)来让它在不支持promises的浏览器上工作(比如IE)。因为IE不支持indexedDB,所以你不必在这种情况下使用它。

相关问题