麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > WEB開發 > 正文

IndexedBD的一些心得(總結)

2024-04-27 15:17:57
字體:
來源:轉載
供稿:網友

IndexedBD的一些心得

教程推薦

HTML5本地存儲——IndexedDB(一:基本使用) html5 web IndexedDB使用詳解前端的數據庫:IndexedDB入門MDN使用 IndexedDB

心得

IDB的異步特性

當你嘗試從result里面想獲取出數據并且另外賦值,請記住,IDB是一個異步asyn的數據交互方式,你每次處理都要在一個回執里面進行才行。 錯誤示范:

var transaction = db.transaction('myQuestionaire','readwrite');var store = transaction.objectStore('myQuestionaire');var IDB = store.get(that.requestInfo);

正確示范:

var transaction = db.transaction('myQuestionaire','readwrite');var store = transaction.objectStore('myQuestionaire');var request = store.get(that.requestInfo);request.onsuccess = function(){ console.log(request.result)//完全可以訪問,還能操作}

嘗試讀取數據時候報錯

Uncaught InvalidStateError: Failed to read the ‘result’ PRoperty from ‘IDBRequest’: The request has not finished

參考原文

這個時候你可能沒懂各個教程里面的各種var聲明,一定要注意作用域的問題。

You need to learn about how to write asynchronous javascript. Your db variable isn’t defined at the time you access it.

錯誤示范:

var r = indexedDB.open();var db = null;r.onsuccess = function(event) { db = event.target.result); }

正確示范:

var r = indexedDB.open();r.onsuccess = function(event) { var db = event.target.result;};

that means db isn’t available outside the scope of the onsuccess function. Stop trying to use it outside its scope or you will just run into the problem you are experiencing.

Put的時候報錯

failed to execute ‘put’ on ‘idbobjectstore’ evaluating the object store’s key path did not yield a value

參考原文

儲存數據的時候必須要帶上object store的key一起儲存,或者使用一個key generator({autoIncrement: true}) 例如:

var store = db.createObjectStore('my_store', {keyPath: 'key'});store.put({key: 11, value: 33}); // OKstore.put({value: 66}); // throws, since 'key' is not presentvar store = db.createObjectStore('my_store', {keyPath: 'key', autoIncrement: true});store.put({key: 11, value: 33}); // OK, key generator set to 11store.put({value: 66}); // OK, will have auto-generated key 12

執行transaction時報錯

Uncaught InvalidStateError: Failed to execute ‘transaction’ on ‘IDBDatabase’: A version change transaction is running

參考原文

The versionchange transaction also allows you to readwrite. You just need to access the transaction created for you within the onupgradeneeded function.

function go() { var req = indexeddb.open(...); req.onupgradeneeded = function(event) { var db = event.target.result; var os = ... var transaction = event.target.transaction;// the important part var addRequest = transaction.objectStore('').index('').add('value'); addRequest.onsuccess = function() {console.log('Success!');}; };}

You are encountering the error because you are trying to start a second transaction while the version change transaction is still running.

這個時候聯系到的知識點就時versionchange,這種狀態的改變在IDB里面要放到打開數據庫的回執的onupgradeneeded函數里面。針對onunpgradeneeded的介紹,摘抄了百度知道里面一個回答,看了就懂了。

IDBOpenDBRequest還有一個類似回調函數句柄——onupgradeneeded。 該句柄在我們請求打開的數據庫的版本號和已經存在的數據庫版本號不一致的時候調用。

indexedDB.open方法還有第二個可選參數,數據庫版本號,數據庫創建的時候默認版本號為1,當我們傳入的版本號和數據庫當前版本號不一致的時候onupgradeneeded就會被調用,當然我們不能試圖打開比當前數據庫版本低的version.

代碼中定義了一個myDB對象,在創建indexedDB request的成功毀掉函數中,把request獲取的DB對象賦值給了myDB的db屬性,這樣就可以使用myDB.db來訪問創建的indexedDB了。

用indexedBD的時候要善用onerror來獲取錯誤的信息,這樣就知道哪里出錯了。

以前做一個webapp碰到的坑

參考之前寫過的一篇文章——【Hours】使用indexedDB中遇到的問題。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一区二区精品视频 | 久久人人人 | 夜夜b | 亚洲第一精品在线 | 欧美一级黄色网 | avav在线播放| 毛片一区二区三区四区 | 香蕉国产片 | 免费观看一区 | 国产成人高清在线 | 精品国产96亚洲一区二区三区 | 久久久久久免费免费 | 香蕉久久久久久 | 亚洲成人中文字幕在线 | 欧美视频一区二区三区在线观看 | 在线观看一二区 | 欧美日本免费一区二区三区 | 国产成人av在线播放 | 色视频在线 | 黄色片网站在线看 | 久久免费观看一级毛片 | 成人福利软件 | 国产精品久久久久久久久久三级 | 欧美精品亚洲人成在线观看 | 男女一边摸一边做羞羞视频免费 | 午夜丰满少妇高清毛片1000部 | 被啪羞羞视频在线观看 | 精国品产一区二区三区有限公司 | 国产激情精品一区二区三区 | av亚洲在线观看 | 欧美亚洲啪啪 | 91精品中文字幕 | 成人18免费观看 | 国产精品一区二区三区在线 | 国产在线精品一区二区三区 | 国产精品欧美久久久久一区二区 | 8x成人在线电影 | 日本a∨精品中文字幕在线 欧美1—12sexvideos | 最新黄色电影网站 | 国产午夜精品一区二区三区免费 | 久久久精品视频免费看 |