IndexedDB JavaScript Promise无法解析事件.目标.结果

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

我需要打开事务,读取objectstore数据,并检查数据是否未定义,以及数据是否在indexedDB中定义,如果没有,则使用network_ip()函数获取新数据。
但问题是,当我使用承诺,“const r”变量总是未定义的
resolve(e.target.result)

未解析已成功定义**“r”变量,但结果**为空。

const time = new Date().getTime();

async function network_ip(){
    let ipaddr = await fetch('https://example.com/ip.php');
    ipaddr = await ipaddr.text();
    db.transaction(['ip'], 'readwrite').objectStore('ip').put({ip:ipaddr, times:time}, 1);
}

new Promise(function(resolve) {
    db.transaction(['ip'], 'readwrite').objectStore('ip').get(1).onsuccess = function(e){
        const r = resolve(e.target.result); // this line is not working
        if (r !== undefined && r.ip !== undefined && r.times !== undefined) {
            t = r.times;
            i = r.ip;
        }else{
            network_ip();
        }
    }
}).then(function(result){
    console.log(result);
});
hi3rlvi2

hi3rlvi21#

我认为您希望将e.target.result的值赋给r,并将e.target.result传递给resolve()函数。
因为resolve()没有返回值,所以你的代码不起作用,所以给它的执行赋值是不确定的,但是你需要把它分成两行:

resolve(e.target.result);
const r = e.target.result;

相关问题