下面是我想要同步的代码
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
我尝试了所有可能的方法,但似乎不可能
这是一个有承诺的代码:
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
};
});
}
我希望这有帮助