- JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
358 :デフォルトの名無しさん[sage]:2016/08/21(日) 21:25:32.47 ID:u7v77FIA - IndexedDBでdeleteObjectStoreする時にトランザクションが(仕様上)取れなくて、
そのままdb.close()するとエラーになる時があるんだが、これってどうすればいいのだ? e.target.errorは以下。e.target.transacsionはnull(IDBFactory.openで呼んだ直後) target:IDBOpenDBRequest error:DOMException: The connection was closed. code:20 message:"The connection was closed." name:"AbortError" createObjectStoreはtransactionプロパティがあるのでそれでoncompleteを待てるのだが、 deleteObjectStoreは何故かvoidを返す仕様で、待ちようがない。 ならばそのままクローズで良いのかと思いきや、エラーになる。 https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/deleteObjectStore 普通ならIDBDatabase.transactionがプロパティでそこから辿れるはずなのだが、メソッドだし。 deleteの時にトランザクションがないわけがないし、 それにアクセス出来ないのは仕様上の欠陥だと思うが。 createObjectStoreがobjectStoreを返すのは便利で良いが、本来はTransactionを返すべき。 だったら空オブジェクトにtransactionプロパティだけでも付けておいてくれないと対応出来ない。 なおヒット状況は、 1. あらかじめIndexedDBに500個ほどオブジェクトストアを作っておく。 2. open直後にそのうち3つほどを連続して消す。 3. クローズ。 この3のタイミングの取り方が分からない。 IndexDBは初めて使うので、使い方が間違っていたり、 或いは大幅に勘違いしてるかもしれないけど、その辺も含めてよろしく。 なおアプリとしてはもう一度削除されるだけなのでクリティカルな問題ではない。
|
- JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
360 :デフォルトの名無しさん[sage]:2016/08/21(日) 23:07:56.19 ID:u7v77FIA - createObjectStoreも単発で作るだけなら同じかもしれないが、それは試していない。
こちらの使い方では以下サンプルの通り、 createObjectStore直後にobjectStore.transaction.completeで書き込みを行っているので、 書き込み側では今のところ問題はない。 > 「データベースを構築する」からの抜粋 > var objectStore = db.createObjectStore("customers", { keyPath: "ssn" }); > objectStore.transaction.oncomplete = function(event) { > } > https://developer.mozilla.org/ja/docs/Web/API/IndexedDB_API/Using_IndexedDB#Opening_a_database ちなみにcreateObjectStoreのtransactionは複数作成しても同一なので (oncompleteは最後に1回呼ばれるだけ) おそらくdeleteObjectStoreのトランザクションとも同一。 だからこれが見えれば問題は解決出来るはずなのだが、辿り方が分からない。 (というか仕様上抜けているように見える)
|
- JavaScript情報交換所(プログラミング既習者専用) [無断転載禁止]©2ch.net
361 :デフォルトの名無しさん[sage]:2016/08/21(日) 23:34:58.54 ID:u7v77FIA - ちなみにcreateObjectStore/deleteObjectStoreを常用しようとしている。
APIを見る限り、確かにこれは通常想定されている使い方ではないようだが、 versionカウンタが64bit整数だから出来ない使い方でもない。 管理上最適な階層にすると、今回はcreate/deleteを常用する事になる。 だからそれが出来るかどうか試している。(実用に耐えるかどうか)
|