我想让下面的代码同步执行[重复]

问题描述 投票:0回答:1

下面是我想要同步的代码

subtractBtn.addEventListener("click",  (e) => {

    console.log("executing");
    readDatafromDB();
    console.log("executing after read");

});



function readDatafromDB() {

    const db_store = createTransaction("readwrite");
    const data = db_store.get(79);

    console.log("executing 2");
    
    data.onsuccess =  function(e) {       
        var data = e.target.result;
        console.log("data is: ", data);
    };

    data.onerror = function(e) {

    };
    console.log("executing 4");
}

由于从 indexedDB 读取数据是异步的,因此打印以下内容:

executing
executing 2
executing 4
executing after read
data is: 

但是,我希望代码以下面的方式同步执行

executing
executing 2
data is: 
executing 4
executing after read

我尝试了所有可能的方法,但似乎不可能

javascript indexeddb
1个回答
0
投票

这是一个有承诺的代码:

subtractBtn.addEventListener("click", async (e) => {
    console.log("executing");
    await readDatafromDB();
    console.log("executing after read");
});

function readDatafromDB() {
    return new Promise((resolve, reject) => {
        const db_store = createTransaction("readwrite");
        const data = db_store.get(79);

        console.log("executing 2");

        data.onsuccess = function (e) {
            var data = e.target.result;
            console.log("data is: ", data);
            console.log("executing 4");
            resolve(); // Resolve the promise once the data is retrieved
        };

        data.onerror = function (e) {
            reject(e); // Reject the promise if an error occurs
        };
    });
}

我希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.