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

Indexddb 兩次 open 被掛起

問題描述

我需要在項目中動態(tài)的增加 indexddb 的“表”(store),而不是一次初始化就能確定好所有要用的表。但在觸發(fā)版本更新事件時遇到了問題,問題的癥結(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);
}

運行結(jié)果

圖片描述

疑問

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

回答
編輯回答
陪妳哭

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

2018年8月22日 20:42