鍍金池/ 問(wèn)答/HTML5  數(shù)據(jù)庫(kù)  HTML/ Indexddb 兩次 open 被掛起

Indexddb 兩次 open 被掛起

問(wèn)題描述

我需要在項(xiàng)目中動(dòng)態(tài)的增加 indexddb 的“表”(store),而不是一次初始化就能確定好所有要用的表。但在觸發(fā)版本更新事件時(shí)遇到了問(wèn)題,問(wèn)題的癥結(jié)如下:

代碼如下

const one = window.indexedDB.open('test');
one.onupgradeneeded = e => {
  console.log('db one upgrade success', e.target.readyState);
  updateDB();
}

function updateDB() {
  const tow = window.indexedDB.open('test', 2);
  tow.onupgradeneeded = e => {
    console.log('db tow upgrade success', e.target.readyState);
  }
  tow.onblocked = e => {
    console.log('blocked:', e)
  }

  setTimeout(() => {
    console.log(tow.readyState);
  }, 3000);
}

運(yùn)行結(jié)果

圖片描述

疑問(wèn)

在創(chuàng)建數(shù)據(jù)庫(kù)后,對(duì)數(shù)據(jù)庫(kù)進(jìn)行版本的更新,并期望在 upgradeneeded 事件中進(jìn)行一些操作,但第二次的操作一直被掛起,無(wú)法觸發(fā) upgradeneeded 事件。事實(shí)上,successerror 也沒(méi)有被觸發(fā)。請(qǐng)問(wèn)這種情況要怎么解決?

回答
編輯回答
陪妳哭

目測(cè)indexedDB 打開后開啟了一次事務(wù),你不能在upgradeneeded 里邊再次調(diào)用open 這樣是兩個(gè)事務(wù)肯定沖突

2018年8月22日 20:42