首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IndexedDB等待事件

IndexedDB等待事件
EN

Stack Overflow用户
提问于 2018-03-06 10:12:11
回答 1查看 3.1K关注 0票数 5

当我试图从对象存储中检索数据时,IndexedDB出现了问题。

代码语言:javascript
复制
 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“完成?

任何帮助都会被极大地利用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 10:24:39

可能的解决方案与Promise

代码语言:javascript
复制
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);
            }
        }
    });
}

然后按如下方式实现:

代码语言:javascript
复制
const result = await getLayoutData();
// Do whatever you want with the data

通常,您需要一个(应许填充)来使它与不支持承诺的浏览器(例如IE)一起工作。因为IE不支持indexedDB,所以您不必在这种情况下使用它。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49128292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档